RatingBar를 만들어 별 다섯 개를 표시하는 방법


98

을 추가하는 방법에 대한 표준 예를 따르고 있습니다 RatingBar. 별의 수를 조절하기 위해 사용하려고했습니다 android:numStars="5". 문제는 별의 수가 전혀 아무것도하지 않는 것 같다는 것입니다. 세로 레이아웃에서는 별 6 개를 받고 휴대폰을 뒤집 으면 별 10 개 정도를 얻습니다. myBar.setNumStars(5)xml을로드하는 내 활동 ( ) 의 별 수를 설정하려고했지만 해당 옵션으로도 성공하지 못했습니다.

그래서 제 질문은 별 다섯 개만 표시되도록 레이아웃을 어떻게 정의합니까? 세트 numStars가 작동하지 않는 것 같습니다.

미리 감사드립니다, Roland

답변:


180
<RatingBar
            android:id="@+id/rating"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            style="?android:attr/ratingBarStyleSmall"
            android:numStars="5"
            android:stepSize="0.1"
            android:isIndicator="true" />

코드에서

mRatingBar.setRating(int)

120
답변 해 주셔서 감사합니다. 문제는 RatingBar apperenty가 android : numStars othervise를 무시하기 때문에 android : layout_width = "fill_parent"를 사용할 수 없다는 것입니다. :-/
Roland

3
내 요구 사항은 부모를 채우거나 부모와 일치하도록 ratingbar를 설정하는 것입니다. 그러나 고정 된 별은 5. 어떻게합니까? 가능할까요?
Prashanth Debbadwar

@PrashanthDebbadwar u는 "스타일"속성에서 3 개의 다른 크기를 시도 했습니까? 예를 들어 ratingBarStyle
M. 우스만 칸

65

RatingBar.setNumStar문서는 말합니다 :

표시 할 별 수를 설정합니다. 이러한 항목이 제대로 표시 되려면이 위젯의 ​​레이아웃 너비가 내용을 감싸는 것이 좋습니다.

따라서 레이아웃 너비를로 설정하면 wrap_content이 문제가 해결됩니다.


25

나를 위해 일한이 : RatingBar내부해야한다 LinearLayout에 대한 랩 콘텐츠에 세트 폭 레이아웃을하는 것보다 다른 RatingBar.


1
@ValentinGalea는 그리 이상하지 않습니다. 등급 표시 줄은 자체 너비를 고려하고 외부 LinearLayout은 부모 레이아웃 너비를 채우는 데 관심이 있습니다.
TechNyquist 2014

13

또한를 설정 layout_weight하면 numStars속성을 대체 합니다.


2
이것은 정말로 문서에 있어야합니다. 나는 심지어 추가 마진을 바로 설정도 numStars 오프 던졌습니다 발견
안톤 I. Sipos

이것은 좋은 조언이었습니다. 나는 마침내 그것이 나를 위해 작동하도록 패딩을 제거했습니다.
Tha Leang

7

당신은 사용해야 numStars="5"당신의 XML, 및 세트 android:layout_width="wrap_content".
그런 다음 스타일 및 기타 항목을 가지고 놀 수 있지만 layout_width의 "wrap_content"가 트릭을 수행합니다.


6

사용하는 경우

android:layout_width="match_parent"

wrap_content를 사용하면 numStars 세트 만 표시됩니다. :)

android:layout_width="wrap_content"


5
<RatingBar
                    android:id="@+id/ratingBar"
                    style="@style/custom_rating_bar"
                    android:layout_width="wrap_content"
                    android:layout_height="35dp"
                    android:clickable="true"
                    android:numStars="5" 
                    />

XML 파일에서 별 수를 구성합니다 ... 스타일 또는 활동 / 조각에 제공 할 필요가 없습니다. .... 중요 : WIDTH를 줄 바꿈 내용으로 입력하고 가중치가 활성화되지 않았는지 확인하십시오.


5

나는 또한 지정된 별 수보다 별을 초과하는 문제에 직면하고 있습니다. 이를 위해 우리는 레이아웃 유형이 상대적이거나 선형 인 레이아웃에 대해 걱정하지 않아도됩니다. 다음과 같이 너비를 사용하면됩니다.

ratingBar.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));


제발 하지 않도록 사용 match_parent와 fill_parent을 위한 ratingbar .
도움이 되길 바랍니다.


3

@Roland 문제에 직면했지만라는 속성을 하나 더 포함했습니다.

android:layout_alignParentRight="true" 

RatingBarXML의 내 선언에서. 이 속성은 필요한 별을 설정하고NumStars

당신이 만난 문제에 대해 계속 게시하십시오!


같은 일로 친구를 도왔습니다. 나는이 접근법을 제안했고 나중에 그것이 유효하지 않다는 것을 알게되었습니다.
AdamMc331 2015 년

3

저에게는 패딩을 제거 할 때까지 문제가있었습니다. 패딩을 수용하기 위해 뷰의 크기를 변경하지 않고 대신 콘텐츠를 압축하는 특정 장치에 버그가있는 것 같습니다.

을 제거 padding하고 layout_margin대신 사용 하십시오 .


1

둥근 그림으로 간단한 별 등급을 표시하려면 다음 코드를 사용하십시오.

public static String getIntToStar(int starCount) {
        String fillStar = "\u2605";
        String blankStar = "\u2606";
        String star = "";

        for (int i = 0; i < starCount; i++) {
            star = star.concat(" " + fillStar);
        }
        for (int j = (5 - starCount); j > 0; j--) {
            star = star.concat(" " + blankStar);
        }
        return star;
    }

그리고 이렇게 사용하세요

button.setText (getIntToStar (4));


1

XML 레이아웃 측면에 별 5 개의 기본 등급을 추가 할 수 있습니다.

android:rating="5"

편집하다:

<RatingBar
        android:id="@+id/rb_vvm"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginBottom="@dimen/space2"
        android:layout_marginTop="@dimen/space1"
        style="@style/RatingBar"
        android:numStars="5"
        android:stepSize="1"
        android:rating="5" />

이것을 xml 레이아웃에 추가하는 방법에 대한 예제를 통해 명확히하십시오.
Kurt Van den Branden

전체보기를 추가했습니다.
Gaurav Shetty

1

당신이 포장하는 경우 RatingBar내부 ConstraintLayoutmatch_constraint의 폭, 에디터 미리보기는 상관없이 당신 설정된 경우 실제 폭에 비례 별의 수를 표시하지 것입니다 android:numStars속성입니다. wrap_content올바른 미리보기를 얻기 위해 사용 :

<RatingBar android:id="@+id/myRatingBar"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_marginStart="48dp"
           android:layout_marginEnd="48dp"
           android:numStars="5"
           app:layout_constraintEnd_toEndOf="parent"
           app:layout_constraintStart_toStartOf="parent"
           app:layout_constraintTop_toBottomOf="parent" />


0
<LinearLayout 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <RatingBar
        android:id="@+id/ruleRatingBar"
        android:isIndicator="true"
        android:numStars="5"
        android:stepSize="0.5"
        style="?android:attr/ratingBarStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />
</LinearLayout>

0

나는 RatingBar그것이 속성을 가진 테이블에 둘러싸여 있었기 때문에 최대 별 수까지 늘어난 것을 발견했습니다 android:stretchColumns = "*".

내가 갔다하면 stretchCoulumns모든 열을 끄려면 RatingBar받는 사람에 따라 표시 android:numStars


0

또 다른 가능성은 목록보기의 어댑터에서 등급을 사용하는 것입니다.

View android.view.LayoutInflater.inflate(int resource, ViewGroup root, boolean attachToRoot)

모든 속성이 제대로 작동하려면 아래 매개 변수가 필요합니다.

  1. 설정 rootparent
  2. 부울 attachToRootfalse

예 : convertView = inflater.inflate (R.layout.myId, parent, false);


0

여기에 실제 것은 사용하는 것 wrap_content대신에 match_parent. 사용할 match_parent경우 레이아웃은 numStars 변수 보다 많은 경우에도 별표로 채워집니다 .


1
몇 가지 유용한 예를 제공 할 수 있습니까?
Alex L.

예, 매치 부모에서는 8
번의
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.