RatingBar numStars无效

2020-12-11  本文已影响0人  王家匀匀

RatingBar 使用办法:
使用 rating 代替numStars。重点设置

  1. max 属性控制最大个数;
  2. stepSize 步长,决定一次最少选几颗星星,有的app支持0.5;
  3. 宽度要设置成 wrap_content。否则 max 无效;
  4. 设置星星默认选中个数,使用rating ,numStars无效;
    rb.rating = 5.0f
  5. 设置style,在style中设置2种状态drawable.
    RatingBar 星星间无法设置间距。如果要求间距,可以在drawable中设置左右相同间距(2星间距/2)。
  6. setIsIndicator(true) 表示不能操作点击和滑动,默认是false。(设置RatingBar能否被用户改变)

layout:

    <RatingBar
        android:id="@+id/rb"
        style="@style/RatingBar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="15dp"
        android:layout_marginEnd="15dp"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="12dp"
        android:isIndicator="false"
        android:numStars="5"
        android:stepSize="1"
        android:max="5"
    />

style:

    <style name="RatingBar" parent="Base.Widget.AppCompat.RatingBar">
        <!--修改默认图片-->
        <item name="android:progressDrawable">
            @drawable/rating_bar
        </item>
        <!--修改默认大小-->
        <item name="android:maxHeight">26dp</item>
        <item name="android:minHeight">26dp</item>
        <item name="android:minWidth">26dp</item>
        <item name="android:maxWidth">26dp</item>

    </style>

drawable/rating_bar.xml:
设置progress为选中的drawable,其它为没有选中的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/pop_windows_icon_nor" />
    <item
        android:id="@android:id/secondaryProgress"
        android:drawable="@drawable/pop_windows_icon_nor" />
    <item
        android:id="@android:id/progress"
        android:drawable="@drawable/pop_windows_icon_sel" />
</layer-list>

RatingBar.setIsIndicator(boolean)源码。注释表示 设置RatingBar能否被用户改变

  /**
     * Whether this rating bar should only be an indicator (thus non-changeable
     * by the user).
     *
     * @param isIndicator Whether it should be an indicator.
     *
     * @attr ref android.R.styleable#RatingBar_isIndicator
     */
    public void setIsIndicator(boolean isIndicator) {
        mIsUserSeekable = !isIndicator;
        if (isIndicator) {
            setFocusable(FOCUSABLE_AUTO);
        } else {
            setFocusable(FOCUSABLE);
        }
    }
上一篇下一篇

猜你喜欢

热点阅读