web-dev-qa-db-ja.com

5つの星を表示するためのRatingBarの作成方法

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

だから私の質問は、5つの星のみを表示するようにレイアウトをどのように定義するのですか? Set numStarsは機能しないようです。

事前に感謝、ローランド

87
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)
159
Alex Volovoy

RatingBar.setNumStarドキュメントには次のように書かれています:

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

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

56
Lisandro

これは私のために働いた:RatingBarは、LinearLayoutのコンテンツをラップするようにレイアウト幅を設定する以外に、RatingBarの中にあるべきです。

25
Supun

さらに、layout_weight、これはnumStars属性に優先します。

10
jsimon
<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ファイルで星の数を設定します...スタイルまたはアクティビティ/フラグメントで指定する必要はありません...

5
Ajith Memana

また、星の数が星の数を超えているという問題に直面しています。このため、相対レイアウトまたは線形レイアウトのいずれかのレイアウトタイプについて心配する必要はありません。次のように幅を使用します。

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


お願いしますavoidmatch_parent and fill_parent for ratingbar.
物事が役立つことを願っています。

5
Deva

XMLでnumStars="5"を使用し、Android:layout_width="wrap_content"を設定するだけです。
それから、スタイルやその他のものをいじることができますが、layout_widthの「wrap_content」がそのトリックです。

4
Adrián Alvarez

使用している場合

Android:layout_width="match_parent"

Wrap_contentを使用すると、セットのnumStarsのみが表示されます:)

Android:layout_width="wrap_content"

4
MQoder

@Rolandという問題に直面していても、もう1つの属性が含まれていました

Android:layout_alignParentRight="true" 

xMLのRatingBar宣言で。この属性により、必要な星の設定とNumStarsの設定が妨げられました

出くわした問題を投稿してください!

3
ReachmeDroid

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

paddingを削除し、代わりにlayout_marginを使用します。

2
John Leehey

単純な星評価を丸い数字で表示するには、このコードを使用します

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" />
1
Gaurav Shetty

デフォルト値は、xmlレイアウトで android:rating で設定されます。

0
Kevin Gaudin
<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
Muzikant

別の可能性は、リストビューのアダプタの評価を使用していることです

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

すべての属性が適切に機能するには、以下のパラメータが必要です

  1. rootparentに設定します
  2. ブール値attachToRoot as false

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

0
Devrath

RatingBarは、属性Android:stretchColumns = "*"でテーブルに囲まれているため、星の最大数まで伸びていることがわかりました。

すべての列からstretchCoulumnsを削除すると、Android:numStars値に従ってRatingBarが表示されます

0
Jon