これはばかげているように聞こえるかもしれませんが、Android の UI コンポーネントと動作が時々壁から外れているように感じます。
次の XML を検討してください。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<RatingBar
android:id="@+id/ratingBar1"
android:style="@android:style/Widget.Holo.Light.RatingBar.Small"
android:progress="3"
android:max="5"
android:numStars = "5"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
さまざまなデバイス サイズでの表示のスクリーンショット:
Nexus S レーティング バー
タブレット評価バー
小さなデバイス評価バー
プレビュー ツールのみですが、デバイス上で実際にどのように表示されるかを確認できます。
小さなデバイスの動作は気が狂います。5 つ星を指定する RatingBar はどのようにして 3 つしか表示されないのですか? ウィンドウに収まるように星を縮小しないのはなぜですか?
wrap_content の幅が問題であると考えて、layout_width="fill_parent" に切り替えましたが、小さなデバイスでは見た目が変わりませんでしたが、タブレットでは完全に台無しになりました ("numStars" が 5 の場合):
私の質問は、サイジングに関して、RatingBar の適切な動作を取得する方法はありますか? numStars または max で十分だと思うかもしれませんが、それは完全に任意です。より多くの星を描画するように RatingBar が引き伸ばされると、星が追加され、表示される星の数に応じて 3 の進行状況でどのように描画されるかを確認します。numStars を遵守しないと意味がありません。
RatingBar から論理的なパフォーマンスを得る方法がない場合、サードパーティのウィジェットを含む代替手段はありますか? そうでない場合は、常に 5 つの ImageView を描画し、それに応じて機能するようにリグを設定することができると思います。
(この動作はすべて、レイアウト内のただ 1 つの RatingBar で示されたことに注意してください。他のウィジェット/コンポーネントでサイズを変更しようとしたり、独自のスタイルを利用したりすることは忘れてください。既に行われていることは知っていますが、なぜこれがデフォルトの動作なのですか?)