5つの星を表示するようにRatingBarを作成する方法


98

を追加する方法の標準的な例に従っていRatingBarます。星の数を抑えるために使ってみましたandroid:numStars="5"。問題は、星の数がまったく何もしないように見えることです。ポートレートレイアウトでは6つ星を獲得し、電話をめくると約10つ星を獲得します。myBar.setNumStars(5)XMLをロードするアクティビティ()で星の数を設定しようとしましたが、そのオプションでも成功しませんでした。

だから私の質問は、5つの星だけが表示されるようにレイアウトを定義するにはどうすればよいですか?セットnumStarsが機能していないようです。

ローランド

回答:


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
私の要件は、評価バーを親を満たすように設定するか、親に一致するが恒星を一致させることです。出来ますか?
Prashanth Debbadwar

@PrashanthDebbadwarは「スタイル」属性で3つの異なるサイズを試しましたか?例:ratingBarStyle
M. Usman Khan

65

RatingBar.setNumStarドキュメントは言います:

表示する星の数を設定します。これらが適切に表示されるようにするために、このウィジェットのレイアウト幅はコンテンツをラップすることをお勧めします。

したがって、レイアウト幅をに設定すると、wrap_contentこの問題が解決するはずです。


25

これは私にとってうまくいきました:のコンテンツをラップするようにレイアウト幅を設定する以外のRatingBar内部にある必要がありますLinearLayoutRatingBar


1
@ValentinGaleaはそれほど奇妙ではありません。評価バーはそれ自体の幅を気にしますが、外部のLinearLayoutは親レイアウトの幅を埋めることを考慮します。
TechNyquist 2014年

13

さらに、を設定した場合layout_weight、これはnumStars属性に優先します。


2
これは本当にドキュメントにあるはずです。マージンを適切に設定しても、numStars
Anton I. Sipos

これは良いアドバイスでした。パッディングを削除して、最終的に機能させました。
Tha Leang、2015

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

私にとっては、パディングを取り除くまで問題がありました。特定のデバイスには、パディングに対応するためにビューのサイズを変更せず、代わりにコンテンツを圧縮するバグがあるようです。

削除しpaddinglayout_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レイアウトに追加する方法の例で明確にしてください。
カートファンデンブランデン

完全なビューを追加しました。
Gaurav Shetty 2016

1

あなたがラップしている場合はRatingBar内部をConstraintLayoutしてmatch_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)

以下のparamsは、すべての属性が正しく機能するために必要です。

  1. 設定するrootにはparent
  2. ブール値attachToRootとしてfalse

例: convertView = inflater.inflate(R.layout.myId、parent、false);


0

ここで実際に使用するのはのwrap_content代わりに使用することですmatch_parent。使用する場合match_parent、レイアウトはnumStars変数を超えていても星で塗りつぶされます。


1
役立つ例をいくつか教えていただけますか?
Alex L.

はい、親の試合では8スタートでしたが、ラップコンテンツでは5
Vipin Sharma
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.