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中显示点什么
}
};
原文地址:http://blog.csdn.net/true100/article/details/45195045