Android自定义RatingBar的显示样式

fydxdk 9年前

      RatingBar是我们在做项目时常用到的一个控件View,用来表示评价的指数。是五角星样式的,但自带的样式有时候在我们项目中显示不协调,我们就要自定义RatingBar的显示样式。

  先还是在布局页面中写上控件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/my_need_evaluate_linearlayout_top"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:layout_marginTop="28dp"
            android:text="请评分"
            android:textSize="22sp" />

            <RatingBar
                android:id="@+id/my_evaluate_rabar"
                style="@style/MyRatingBar"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"

                android:layout_marginLeft="10dp"
                android:isIndicator="false"
                android:numStars="5"
                android:rating="0"
                android:stepSize="1.0" />
    </LinearLayout>

是在哪改变其样式呢?就在布局中的  style="@style/MyRatingBar",这是我们自定义的一个style:

   <style name="MyRatingBar" parent="@android:style/Widget.RatingBar">
        <item name="android:progressDrawable">@drawable/my_evaluate_ratingbar_color</item>
        <item name="android:minHeight">20dip</item>
        <item name="android:maxHeight">20dip</item>
        <item name="android:minWidth">20dip</item>
    </style>

在上面的style中用到的drawable/my_evaluate_ratingbar_color:

<?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/my_star_normal"/>//正常情况下样式
    <item
        android:id="@+android:id/secondaryProgress"
        android:drawable="@drawable/my_star_normal"/>
    <item
        android:id="@+android:id/progress"
        android:drawable="@drawable/my_star_select"/>//这就是我们选中的样式

</layer-list>

诸如my_star_normal这样的图片是让UI切的图片。

在Activity中的使用就简单了:

private RatingBar mRatingBar; // 评价等级

mRatingBar = (RatingBar) findViewById(R.id.my_evaluate_rabar);

mRatingBar.setOnRatingBarChangeListener(ratingBarListener);

private OnRatingBarChangeListener ratingBarListener = new OnRatingBarChangeListener() {

@Override
public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) {
//你要做的操作,比如在某个TextView中显示点什么
}

};