我知道这听起来很麻烦,但是有时候感觉就像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”并没有改变小型设备的外观,但在Tablets上却完全搞砸了(“numStars”为5的情况如此之多):
我的问题是,有没有一种方法可以使RatingBar的大小正确?您会认为numStars或max足够了,但这完全是任意的。拉伸(stretch)RatingBar以便绘制更多星星时,它会添加星星并查看进度为3时如何根据显示的星星数绘制它?不遵守numStars是没有道理的!
如果无法从RatingBar获得逻辑性能,是否还有其他选择,包括3rd party小部件?如果没有的话,我想我总是可以绘制5个ImageView并进行装配以相应地执行。
(请记住,所有这些行为都只在布局中显示了一个RatingBar -忘记尝试与其他小部件/组件一起调整大小,或者利用您自己的样式。我知道已经完成了,但是为什么这是默认行为呢?)
最佳答案
使用股票RatingBar时,我的感觉与您相同,所以我制作了自己的:SimpleRatingBar。
它具有以下特点:
android:layout_width
:可以将其设置为wrap_content
,match_parent
或可选dp。 Here is a preview of it。
您可以在
jcenter
或Maven Central
中找到它。因此,在build.gradle
文件中,只需添加到您的依赖项中即可:compile 'com.iarcuschin:simpleratingbar:0.1.+'
我希望它有用。
关于Android RatingBar-完全困惑,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12454644/