自定义 RatingBar 始终显示五颗星

Posted

技术标签:

【中文标题】自定义 RatingBar 始终显示五颗星【英文标题】:Custom RatingBar shows always five stars 【发布时间】:2015-05-23 15:19:16 【问题描述】:

我正在开发一个使用自定义 RatingBar 的 android 应用。我遵循了一个教程 (http://kozyr.zydako.net/2010/05/23/pretty-ratingbar/),但是当我使用我的自定义样式时,它总是显示我 5 星,即使我强制 RatingBar 为一个值(例如 3 星)。我在网上用其他一些教程进行了验证,但它并没有改变任何东西..

我的文件:

custom_ratingbar_full.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/custom_ratingbar_full_empty" />
    <item android:id="@+id/secondaryProgress"
        android:drawable="@drawable/custom_ratingbar_full_empty" />
    <item android:id="@+id/progress"
        android:drawable="@drawable/custom_ratingbar_full_filled" />
</layer-list>

custom_ratingbar_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_off" />

    <item android:state_focused="true"
        android:state_window_focused="true"
        android:drawable="@drawable/star_off" />

    <item android:state_selected="true"
        android:state_window_focused="true"
        android:drawable="@drawable/star_off" />

    <item android:drawable="@drawable/star_off" />

</selector>

custom_ratingbar_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_full" />

    <item android:state_focused="true"
        android:state_window_focused="true"
        android:drawable="@drawable/star_full" />

    <item android:state_selected="true"
        android:state_window_focused="true"
        android:drawable="@drawable/star_full" />

    <item android:drawable="@drawable/star_full" />

</selector>

styles.xml

<style name="CustomRatingBar" parent="@android:style/Widget.RatingBar">
    <item name="android:progressDrawable">@drawable/custom_ratingbar_full</item>
    <item name="android:minHeight">48dip</item>
    <item name="android:maxHeight">48dip</item>
</style>

my_fragment.xml

...

        <RatingBar
            android:id="@+id/rating_bar"
            style="@style/CustomRatingBar"
            android:layout_
            android:layout_
            android:isIndicator="true"
            android:layout_marginBottom="10dp"
            android:visibility="invisible" />

...

有什么解释吗?我已经搜索了我做错了什么,但我没有找到它..

编辑:

我如何设置我的评分值:

我在 Fragments 之间发送一个包

myRating = bundle.getInt("rating");

我检索到 RatingBar:

RatingBar ratingBar = (RatingBar) rootView.findViewById(R.id.rating_beer);

最后我测试了是否显示评分栏的值:

if (beerRating != 0) 
    ratingBar.setRating(myRating);
    ratingBar.setVisibility(View.VISIBLE);
    Toast.makeText(getActivity(), "Rating : " + myRating, Toast.LENGTH_LONG).show();

我已经验证了我的价值,但它没有显示正确的星数。但是,如果我从评分栏中删除我的自定义样式,它就会起作用。

编辑 2 解决方案:

最后我找到了解决方案:我已将标签@+android:id 替换为@+id,这就是它不起作用的原因。

【问题讨论】:

你能贴出你为评级栏分配评级的代码吗? 我已经更新了我的帖子 教程中的@Azuken 你提到没有“@+android:id”,我也有同样的问题,但找不到解决办法。你是怎么做到的? 在教程中,标签写成@+android:id,我的IDE显示这个lika错误,所以我替换了它们。但是你必须像教程中所说的那样编写才能让你的应用正常运行 我已经像教程中那样做了:***.com/questions/32208154/… 【参考方案1】:

我遇到了同样的问题。我下载了代码,自定义评分栏文件中的项目是这样的

<item
    android:id="@+android:id/background"
    android:drawable="@drawable/star_blank"/>

为了消除错误,我将 id 更改为

 <item
 android:id="@+id/background"
 android:drawable="@drawable/star_blank"/>

这消除了错误,但它只显示选定的项目星,但评级栏值正在改变。

所以我将自定义评分栏中的 id 更改为

<item
android:id="@android:id/background"
android:drawable="@drawable/star_blank"/>

效果很好。

【讨论】:

【参考方案2】:

试试这个,将可绘制的进度设置为评分栏的属性,

                        <RatingBar

                        android:numStars="5"
                        android:progressDrawable="@drawable/ratingbar_selector"
                        android:stepSize="0.2" />

【讨论】:

最后我找到了解决方案:我已将标签“@+android:id”替换为“@+id”,这就是它不起作用的原因。还是谢谢你!

以上是关于自定义 RatingBar 始终显示五颗星的主要内容,如果未能解决你的问题,请参考以下文章

难以对齐textview和ratingbar

Android自定义评分控件:RatingStarView

Android自定义RatingBar(星级评分控件)

自定义RatingBar,不同分辨率屏幕下图片拉伸或者显示不完整问题解决

淘宝怎么评价才是五颗星而不是笑脸?

android 自定义ratingbar怎么变成这样?