今天做一个评分的功能,但是Android自带的ratingbar的格式限制太多,只有两种格式提供,一个是特别大的,一个是特别小的,根本无法用到商业项目中去,于是自己自定义了一下ratingbar效果如下所示:
RatingBar为评分条控件,默认效果为若干个绿色的星星,如果想将其换成其他自定义图片就要自定义它的style。
1
2
3
4
5
6
7
8
9
|
<RatingBar
android:id=
"@+id/detail_rb_score_detail"
style=
"@style/MyRatingBar"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_toLeftOf=
"@id/detail_tv_score_detail"
android:numStars=
"5"
android:rating=
"1.5"
android:stepSize=
"0.5"
/>
|
其中android:numStars="5"设置显示的星星数量为5; android:rating="5"设置选中的数量为5,也就是全部选中
android:isIndicator="true"设置评分条只显示结果无法通过点击改变选中状态。
然后在res/values目录下建立styles.xml文件 代码:
1
2
3
4
5
|
<style name=
"MyRatingBar"
parent=
"@android:style/Widget.RatingBar"
>
<item name=
"android:progressDrawable"
>
@drawable
/detail_ratingbar</item>
<item name=
"android:minHeight"
>20dip</item>
<item name=
"android:maxHeight"
>20dip</item>
</style>
|
android:progressDrawable为评分条图案。接下来在res/drawable目录下建立RatingBar.xml文件
1
2
3
4
5
6
7
8
9
|
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
<
item
android:id
=
"@+android:id/background"
android:drawable
=
"@drawable/rating"
/>
<
item
android:id
=
"@+android:id/secondaryProgress"
android:drawable
=
"@drawable/detail_float"
/>
<
item
android:id
=
"@+android:id/progress"
android:drawable
=
"@drawable/rating_show"
/>
</
layer-list
>
|
layer-list 可以把图片进行层叠,实现类似的效果!
1
2
3
4
5
6
7
8
9
|
<item android:id=
"@+android:id/background"
android:drawable=
"@drawable/detail_score_bg"
/>
<item android:id=
"@+android:id/secondaryProgress"
android:drawable=
"@drawable/detail_float"
/>
<item android:id=
"@+android:id/progress"
android:drawable=
"@drawable/detail_score_press"
/>
</layer-list>
|
<item android:id="@+android:id/background"
android:drawable="@drawable/detail_score_bg" /> 这个是背景图片,也就是灰色的星星
<item android:id="@+android:id/secondaryProgress"
android:drawable="@drawable/detail_float" />这个是半个红色星星,进度是0.5时使用
<item android:id="@+android:id/progress"
android:drawable="@drawable/detail_score_press" /> 这个是整个红色星星