IT story

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

hot-time 2020. 9. 10. 18:57
반응형

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


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

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

미리 감사드립니다, Roland


<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)

RatingBar.setNumStar문서는 말합니다 :

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

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


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


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


<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를 줄 바꿈 내용으로 입력하고 가중치가 활성화되어 있지 않은지 확인하십시오.


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

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


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


사용하는 경우

android:layout_width="match_parent"

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

android:layout_width="wrap_content"


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


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

android:layout_alignParentRight="true" 

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

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


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

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


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

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));


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 레이아웃에서 andoid : rating 으로 설정됩니다 .


<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>

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

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


Another possibility is you are using the Rating in Adapter of list view

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

Below params are necessary for all the attributes to work properly:

  1. Set the root to parent
  2. boolean attachToRoot as false

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

참고URL : https://stackoverflow.com/questions/3858600/how-to-make-ratingbar-to-show-five-stars

반응형