本篇基于Android系统默认的RatingBar进行美化
1.先上个效果图
2.配置文件中的代码:
<RatingBar
android:id="@+id/room_ratingbar"
style="@style/roomRatingBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dip">
</RatingBar>
自定义ratingbar主要是这段style="@style/roomRatingBar"
3.编写styles.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="roomRatingBar" parent="@android:style/Widget.RatingBar">
<item name="android:progressDrawable">@drawable/room_rating_bar</item>
<item name="android:minHeight">16dip</item>
<item name="android:maxHeight">16dip</item>
</style>
</resources>
注解:第一句 parent="@android:style/Widget.RatingBar" 是继承系统的RatingBar的样式
第二句重写android:progressDrawable属性,换成我们自定义@drawable/room_rating_bar文件。
第三、四句 控制该组件的最大和最小高度
4.room_rating_bar.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/room_unselect"></item>
<item android:id="@+android:id/secondaryProgress"
android:drawable="@drawable/room_unselect"></item>
<item android:id="@+android:id/progress"
android:drawable="@drawable/room_select"></item>
</layer-list>
其实真相就在这个配置文件中。这里就是定义组件的背景图片、一级进度背景图片和二级进度背景图片(里面这些id都是系统的id,当系统运行到这里时会自动根据这个id去重画组件)
源码出处:在android framework\base\core\res\res\values(android framework是我保存源码的目录)目录下找到styles.xml文件,该文件是android系统运行时所要加载的文件,里面保存了所有组件的样式定义。在里面你可以找到<style name="Widget.RatingBar">我们之前继承的其中一个组件样式,也有其他<style name="Widget.RatingBar.Small">、<style name="Widget.SeekBar">、<style name="Widget.ProgressBar.Small">等等。这样里面的属性我们继承后就可以被重写成其他的了。