自定义RatingBar样式只显示一个点,其他奇怪的行为

Jos*_*ach 1 android android-layout ratingbar android-drawable android-styles

我设置了以下代码以RatingBar在Android上创建自定义样式:

res/values/styles.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="MyRatingBar" parent="@android:style/Widget.RatingBar">
        <item name="android:minHeight">@dimen/rating_bar_height</item>
        <item name="android:maxHeight">@dimen/rating_bar_height</item>
        <item name="android:progressDrawable">@drawable/circle_ratingbar_full</item>
    </style>
</resources>
Run Code Online (Sandbox Code Playgroud)

res/drawable/circle_ratingbar_full.xml:

<?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/circle_ratingbar_full_empty" />
    <item
        android:id="@android:id/secondaryProgress"
        android:drawable="@drawable/circle_ratingbar_full_empty" />
    <item
        android:id="@android:id/progress"
        android:drawable="@drawable/circle_ratingbar_full_filled" />
</layer-list>
Run Code Online (Sandbox Code Playgroud)

res/drawable/circle_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/button_disabled" />

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

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

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

</selector>
Run Code Online (Sandbox Code Playgroud)

res/drawable/circle_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/button_enabled" />

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

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

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

</selector>
Run Code Online (Sandbox Code Playgroud)

此外,我有两个图像,res/drawable/button_enabled.png并且res/drawable/button_disabled.png,我想用来替代上的星星RatingBar.

Android Studio似乎没有个别dr​​awable的问题.但是,当我RatingBar在xml布局中使用此样式时RatingBar,默认样式的工作没有任何问题,但有一些问题:

  1. 而不是可变数量的评级可绘制,我只看到一个,无论设置的星数是多少.
  2. 如果我没有设置minHeightmaxHeight在样式中,RatingBar将拉伸到更大的高度,但仍然只有一个自定义星(圆).
  3. 如果放在ListView项目视图中,则项目视图本身不再可单击(项目视图可以使用默认样式单击).

在这个设置中有什么我想念的吗?我直接从RatingBarSDK中的默认样式复制drawables 并交换我的值(这导致上面的代码),但它仍然不起作用.

布局中使用的片段:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/accessory_view">

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">

        <TextView
            android:id="@+id/rating_min_text_view"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="Min Value"
            android:paddingLeft="5dp"/>

        <TextView
            android:id="@+id/rating_max_text_view"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="Max Value"
            android:paddingLeft="5dp"/>
    </LinearLayout>

    <RatingBar
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:id="@+id/rating"
        style="@style/MyRatingBar"
        android:stepSize="1.0"/>

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

UPDATE

进一步的测试后,我发现,点击一个点,我看实际上将改变评级的值匹配的任何一部分在那里我点击它.所以看起来RatingBar就像一个0.5步的ProgressBar.因此,对于每个应该具有的每个星星而不是使用drawable,它似乎使用drawable 一次作为整个RatingBar区域的背景.

有没有人知道如何制作它以便我可以简单地替换星形drawable并保留所有其他RatingBar行为?

Jst*_*wll 5

我打开了你的测试项目并进行了一些试错调试.我的结论是你不能使用XML形状drawables作为progressDrawables RatingBar.Android平台RatingBardrawables都是.png文件,这是一个非常好的指标,可能不支持XML drawable.我尝试在您的测试项目中使用位图drawables并且它们工作正常.

你只有解决方案似乎是使用位图drawables,除非你可以找出你自己的RatingBar实现.