代码之家  ›  专栏  ›  技术社区  ›  user_4685247 Mathieu de Brito

设置比例条的样式会打破比例?

  •  2
  • user_4685247 Mathieu de Brito  · 技术社区  · 9 年前

    几天来,我一直在尝试设置我的评级栏,并在谷歌上搜索如何修复它,当我像这样使用动作栏时:

    <RatingBar
                android:layout_width="wrap_content"
                android:layout_height="25dp"
                android:numStars="5"
                android:rating="3"
                android:isIndicator="true"
                android:id="@+id/rating"
                style="?android:attr/ratingBarStyleSmall"
                />
    

    我得到这样的结果: http://i.imgur.com/MwlxGBz.png (我还不能发布图像), 所以,当我写自己的风格并像这样做时:

    <RatingBar
    android:layout_width="wrap_content"
    android:layout_height="25dp"
    android:numStars="5"
    android:rating="3"
    android:isIndicator="true"
    android:id="@+id/rating"
    style="@style/ratingBar"/>
    

    其中ratingBar在styles.xml中定义为:

    <style name="ratingBar" parent="@android:style/Widget.RatingBar">
        <item name="android:progressDrawable">@drawable/ratingstars</item>
    </style>
    

    并且ratingstars在drawinable/ratingstars.xml中定义为:

    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
        <item
            android:id="@android:id/background"
            android:drawable="@drawable/staroff"/>
        <item
            android:id="@android:id/secondaryProgress"
            android:drawable="@drawable/staroff"/>
        <item
            android:id="@android:id/progress"
            android:drawable="@drawable/staron"/>
    </layer-list>
    

    staron和staroff是具有星星所需纹理的png,我得到的结果是: http://i.imgur.com/V31dWpK.png 如何使其大小与第一个示例中的评级条相同,但使用我提供的纹理?

    我已经尝试过使用scaleX和scaleY,它们会切割星星并打乱它们的位置,设置宽度不是一个选项,因为会有超过5颗星,所以我可以在这里做什么?

    1 回复  |  直到 9 年前
        1
  •  3
  •   JanSLO    9 年前

    如果您想使用自定义图像,则需要更改图像的大小。

    如果你只想改变星星的颜色,就可以用代码来实现。

        RatingBar ratingBar = (RatingBar)view.findViewById(R.id.rating);
        LayerDrawable stars = (LayerDrawable) ratingBar.getProgressDrawable();
        stars.getDrawable(0).setColorFilter(Color.GRAY, PorterDuff.Mode.SRC_ATOP);
        stars.getDrawable(1).setColorFilter(Color.GRAY, PorterDuff.Mode.SRC_ATOP);
        stars.getDrawable(2).setColorFilter(Color.BLACK, PorterDuff.Mode.SRC_ATOP);
    

    在本例中,显示评级的星星将为黑色,其他星星将为灰色。

    别忘了将RatingBar的样式设置为小。 例子:

    style="@android:style/Widget.DeviceDefault.RatingBar.Small"
    

    在这种情况下,您不需要“drawinable/ratingstars.xml”和“styles.xml”中的样式。