我知道这听起来很荒谬,但感觉就像 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" 并没有改变小型设备上的外观,但它在平板电脑上完全搞砸了(对于 5 的“numStars”来说太多了):
我的问题是,有没有办法让 RatingBar 在大小方面获得适当的行为?您会认为 numStars 或 max 就足够了,但它完全是任意的。当 RatingBar 被拉伸以绘制更多星星时,它会添加星星,看看进度为 3 时,它如何根据显示的星星数绘制它?不遵守 numStars 是没有意义的!
如果无法从 RatingBar 获得逻辑性能,是否有任何替代方案,包括 3rd 方小部件?如果没有,我想我总是可以绘制 5 个 ImageView 并对其进行相应的操作。
(请记住,所有这些行为都是在布局中仅使用一个 RatingBar 展示的 - 忘记尝试使用其他小部件/组件调整大小,或使用您自己的样式。我知道它已经完成,但为什么这是默认行为?)