对评分栏进行样式设置会打破规模吗?
Styling the ratingbar breaks the scale?
几天来我一直在尝试设置我的评分栏的样式并在谷歌上搜索如何修复它,当我像这样使用操作栏时:
<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(我还不能 post 图片),
所以当我写我自己的风格时:
<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 在 drawable/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 个,所以我能在这里做什么?
如果您想使用自定义图片,您需要更改图片的大小。
如果您只想更改星星的颜色,可以使用代码来完成。
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 的样式设置为small。
示例:
style="@android:style/Widget.DeviceDefault.RatingBar.Small"
在这种情况下,您不需要 "drawable/ratingstars.xml" 和 "styles.xml" 中的样式。
几天来我一直在尝试设置我的评分栏的样式并在谷歌上搜索如何修复它,当我像这样使用操作栏时:
<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(我还不能 post 图片), 所以当我写我自己的风格时:
<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 在 drawable/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 个,所以我能在这里做什么?
如果您想使用自定义图片,您需要更改图片的大小。
如果您只想更改星星的颜色,可以使用代码来完成。
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 的样式设置为small。 示例:
style="@android:style/Widget.DeviceDefault.RatingBar.Small"
在这种情况下,您不需要 "drawable/ratingstars.xml" 和 "styles.xml" 中的样式。