6

我知道这听起来很荒谬,但感觉就像 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 评分栏 Nexus S 评分栏

平板电脑评分栏 平板电脑评分栏

小型设备评分栏 小型设备评分栏

即使它只是在预览工具中,我可以确认这实际上是它在设备上的外观。

小型设备的行为令人抓狂。指定 5 颗星的 RatingBar 如何只显示 3 颗星,为什么不按比例缩小星星以适合窗口?

认为 wrap_content 宽度是问题,我切换到 layout_width="fill_parent" 并没有改变小型设备上的外观,但它在平板电脑上完全搞砸了(对于 5 的“numStars”来说太多了):

宽度为 fill_parent 的平板电脑

我的问题是,有没有办法让 RatingBar 在大小方面获得适当的行为?您会认为 numStars 或 max 就足够了,但它完全是任意的。当 RatingBar 被拉伸以绘制更多星星时,它会添加星星,看看进度为 3 时,它如何根据显示的星星数绘制它?不遵守 numStars 是没有意义的!

如果无法从 RatingBar 获得逻辑性能,是否有任何替代方案,包括 3rd 方小部件?如果没有,我想我总是可以绘制 5 个 ImageView 并对其进行相应的操作。

(请记住,所有这些行为都是在布局中仅使用一个 RatingBar 展示的 - 忘记尝试使用其他小部件/组件调整大小,或使用您自己的样式。我知道它已经完成,但为什么这是默认行为?)

4

1 回答 1

3

在使用股票 RatingBar 时,我的感觉和你一样,所以我自己做了一个:SimpleRatingBar

它的特点:

  • 完全工作android:layout_width:它可以设置为wrap_contentmatch_parent或abritary dp。
  • 任意数量的星星。
  • 任意步长。
  • 星星的大小可以精确控制或通过设置最大大小来控制。
  • 可定制的颜色(星星的边框、填充和背景)。
  • 星星之间可定制的大小分隔。
  • 可自定义的星星边框宽度。
  • 允许设置 OnRatingBarChangeListener
  • 星星填充可以设置为从左到右或从右到左开始(支持 RTL 语言)。
  • AnimationBuilder 集成在视图中以通过动画以编程方式设置评分。

这是它的预览

您可以在jcenter或 中找到它Maven Central。因此,在您的build.gradle文件中只需添加到您的依赖项:

compile 'com.iarcuschin:simpleratingbar:0.1.+'

我希望它有用。

于 2016-08-03T17:12:17.960 回答