先上效果图:
这是xml适配器中的关键代码:
<RatingBar
android:id="@+id/book_star_rb"
style="@style/ratingBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="false"
android:max="5" />
这是RatingBar所引用的style:这里需要注意的是android:maxHeight和android:minHeight两个属性,这里我设置的是14dip,是因为★的高度是16左右,
设置成16的三分之二就行了
<!-- 评分组件(★) -->
<style name="ratingBar" parent="@android:style/Widget.RatingBar">
<item name="android:progressDrawable">@drawable/rating_bar_drawable</item>
<item name="android:minHeight">14dip</item>
<item name="android:maxHeight">14dip</item>
</style>
这是style所引用的drawable:rating_bar_drawable.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/book_list_star_empty"/>
<item
android:id="@+android:id/secondaryProgress"
android:drawable="@drawable/book_list_star_empty"/>
<item
android:id="@+android:id/progress"
android:drawable="@drawable/book_list_star_full"/>
</layer-list>
最后在适配器的java代码中设置:
//去掉评分组件的焦点,防止遮挡listView单项的焦点
holder.book_star_rb.setFocusable(false);
//评分组件只能用来显示,不能修改.因此需要取消Touch监听
holder.book_star_rb.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return true;
}
});