【问题标题】:Android ratingbar doesn't updateAndroid 评分栏不更新
【发布时间】: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


【解决方案1】:

您应该将ratingstars.xml 中的id 属性从"@+id/..." 更改为"@android:id/...",因为该资源是android 系统的一部分,并且已经在默认的android 进度drawable 中定义。

<?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@android:id/background" android:drawable="@drawable/ratingstars_full_empty" />
    <item android:id="@android:id/secondaryProgress" android:drawable="@drawable/ratingstars_full_empty" />
    <item android:id="@android:id/progress" android:drawable="@drawable/ratingstars_full_filled" />
</layer-list>

【讨论】:

    【解决方案2】:

    看起来这不是调用侦听器的问题,而只是您应用到它的自定义android:progressDrawable 样式属性。我的猜测是您正在使用的可绘制对象正在做意想不到的事情。尝试从 RatingBar 中删除 style="@style/starBar" 并查看是否按预期工作。如果是这样,那是你的问题

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多