【发布时间】:2015-01-15 01:53:33
【问题描述】:
我在我的应用中制作了一个评分栏,它使用自定义样式,使用我自己的星星。
我的评分栏定义如下:
<RatingBar
android:layout_width="wrap_content"
android:layout_height="15dp"
android:id="@+id/ratingBar"
android:numStars="10"
android:stepSize="1"
android:rating="10"
android:layout_marginTop="5dp"
android:layout_below="@id/feedbackTable"
android:layout_toRightOf="@id/ratingText"
android:layout_marginLeft="5dp"
style="@style/starBar" />
我在styles.xml中使用的样式是:
<style name="starBar" parent="@android:style/Widget.RatingBar">
<item name="android:progressDrawable">@drawable/ratingstars</item>
<item name="android:minHeight">22dip</item>
<item name="android:maxHeight">22dip</item>
</style>
使用 ratingstars.xml:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/background" android:drawable="@drawable/ratingstars_full_empty" />
<item android:id="@+id/secondaryProgress" android:drawable="@drawable/ratingstars_full_empty" />
<item android:id="@+id/progress" android:drawable="@drawable/ratingstars_full_filled" />
</layer-list>
当我调整 android:rating 时,它会在预览中显示正确数量的星星填充和空白。但是,使用我的模拟器或真实设备时,该栏完全充满了星星 (10/10)。我尝试使用以下代码以编程方式对其进行调整:
ratingbar.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() {
public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) {
Log.d("rating", rating+"");
ratingbar.setRating(rating);
}
});
现在来自 logcat 的日志实际上显示评级已更改,但条形图并未在视觉上更新自身,例如6 颗星满了,4 颗空了,我不知道为什么。
drawables 是正确的,因为预览也显示它是正确的,那么这可能是什么原因呢?
编辑:
这是 ratingstars_full_filled.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:state_window_focused="true"
android:drawable="@drawable/star" />
<item android:state_focused="true"
android:state_window_focused="true"
android:drawable="@drawable/star" />
<item android:state_selected="true"
android:state_window_focused="true"
android:drawable="@drawable/star" />
<item android:drawable="@drawable/star" />
</selector>
这里是 ratingstars_full_empty.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:state_window_focused="true"
android:drawable="@drawable/star_empty" />
<item android:state_focused="true"
android:state_window_focused="true"
android:drawable="@drawable/star_empty" />
<item android:state_selected="true"
android:state_window_focused="true"
android:drawable="@drawable/star_empty" />
<item android:drawable="@drawable/star_empty" />
</selector>
【问题讨论】:
-
" 现在来自 logcat 的日志实际上显示评级已更改,但条形图并未在视觉上更新自身,例如 6 星已满,4 星为空,我不知道为什么。" ======> 这意味着您可能没有正确更新评分栏。因此,您只需检查评分栏评分是否在您所需的代码区域正确更改!
-
ID 在 ratingstars.xml 中不应该以 '@android:id' 而不是 '@+id' 开头吗?
-
不,因为它是ids的xml文件中第一次出现
标签: android user-interface android-studio ratingbar