RatingBar==>星级评分条
RatingBar和SeekBar十分相似,它们甚至有相同的父类:AbsSeekBar.两者都允许用户通过拖动来改变进度;
两者最大的区别在于RatingBar是通过星星表示进度;RatingBar本身就是一个特殊的SeekBar。
RatingBar常见XML属性如下图:
注意:为了程序支持响应星级评分条的改变,程序可以考虑为其绑定一个OnRatingBarChangeLinstener监听器。
实例如下:
布局文件==》 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <!-- <ImageView android:id="@+id/image" android:layout_width="wrap_content" android:layout_height="200px" android:src="@drawable/no" />--> <RatingBar android:id="@+id/ratingbar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:max="255" android:numStars="5" android:progress="255" android:stepSize="0.5" /> </RelativeLayout> 代码实现==》 package com.example.myratingbar; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.widget.ImageView; import android.widget.RatingBar; import android.widget.RatingBar.OnRatingBarChangeListener; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); RatingBar bar = (RatingBar) this.findViewById(R.id.ratingbar); //final ImageView img = (ImageView) this.findViewById(R.id.image); bar.setOnRatingBarChangeListener(new OnRatingBarChangeListener() { @SuppressWarnings("deprecation") @Override public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) { //img.setAlpha((int) (rating * 255 / 5)); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }
实现效果如:
如何替换如上图系统默认星星图标,实现方式如下:
参考:http://my.oschina.net/amigos/blog/60060
drawable-mdpl资源文件==》
<?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/unselect"> </item> <item android:id="@+android:id/secondaryProgress" android:drawable="@drawable/unselect"> </item> <item android:id="@+android:id/progress" android:drawable="@drawable/select"> </item> </layer-list>
样式文件==》style.xml
<style name="roomRatingBar" parent="@android:style/Widget.RatingBar"> <item name="android:progressDrawable">@drawable/ratingbar_drawable</item> <item name="android:minHeight">48dip</item> <item name="android:maxHeight">48dip</item> </style>
加 布局文件==》
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity" > <RatingBar android:id="@+id/ratingbar" style="@style/roomRatingBar" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="10dip" android:numStars="8" android:rating="1.5" android:stepSize="0.15" /> </LinearLayout>
运行效果如下: