我知道这听起来很麻烦,但是有时候感觉就像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_contentmatch_parent或可选dp。
  • 任意星数。
  • 任意步长。
  • 可以完全控制星星大小,也可以通过设置最大大小来控制星星大小。
  • 可自定义的颜色(边框,星星的填充和背景)。
  • 可自定义的星际大小分隔。
  • 可自定义的星星边框宽度。
  • 允许设置OnRatingBarChangeListener
  • 星星填充可以设置为从左到右或从右到左开始(RTL语言支持)。
  • AnimationBuilder集成在 View 中,可通过动画以编程方式设置评级。

  • Here is a preview of it

    您可以在jcenterMaven Central中找到它。因此,在build.gradle文件中,只需添加到您的依赖项中即可:
    compile 'com.iarcuschin:simpleratingbar:0.1.+'
    我希望它有用。

    关于Android RatingBar-完全困惑,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12454644/

    10-09 15:47