我有一个RatingBar的标准实现。 5星,1步。

<RatingBar
    android:id="@+id/ratingBar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:numStars="5"
    android:stepSize="1"
    android:progressDrawable="@drawable/dark"
    android:rating="@={viewModel.rating}"
/>

我注意到我实际上在某些设备或品牌上存在问题:三星,Nexus,也许还有更多...但是我在索尼和LG设备上没有问题,也许在这里也有更多问题。

问题在于选择值时的精度确实很差。看来,如果我通过可绘制等级的中间部分,它将填充以下“星号”。这似乎是这些设备的阈值,而事实就是如此。 LG和Sony的行为方式是,当您经过两个“星星”之间的距离的一半时,它将填充下一个星星。

那么,有什么我可以防止的事情吗?

最佳答案

据我所知,没有办法解决它。

我是一个库的创建者,该库提供了Android默认的RatingBar:SimpleRatingBar的替代方法,我们在一个issue中讨论了此行为。

在资料库中,我们修改了此行为,因此只有按下至少1/4颗星时,才会选择一颗星。我相信这可以改善使用时的整体体验。

如果您愿意,可以尝试一下。
它具有以下特点:

  • 完全可用的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.+'
    我希望它有用。

    07-24 09:49
    查看更多