RatingBar评分控件使用笔记

来源:互联网 发布:磨皮插件怎么安装mac 编辑:程序博客网 时间:2024/06/05 23:57

需要了解

Android的进度条一共有三种,RatingBar属于可拖拽的评分条,本质上还是进度条。

进度条:

*   ProgressBar*   SeekBar*   RatingBar

参考资料

  • 全部:http://www.jianshu.com/p/75610e5a64a5
  • 自定义样式:http://blog.csdn.net/fff2666/article/details/50498238

资料使用总结

  • 完美,可惜该控件无法自定义宽高,只能设置包裹内容(wrap_content),所以一旦对宽高有要求,需要设置自定义样式
  • 使用过程不加赘述,发现两篇文章都没有告知如何设置评分的初始值,所以添加笔记

    // 更新评分ratingBar.setRating(float rating);// 得到评分float rating = ratingBar.getRating();// 更新步长ratingBar.setStepSize(float ratingBarStepSize);// 获得步长float ratingBarStepSize = ratingBar.getStepSize();// 获得星星个数int numStars = getNumStars();// 更新星星个数setNumStars(int numStars);

文章内容整理

  • 布局文件(xml)

    • 属性参数
      • android:numStars:星星个数
      • android:rating:默认点亮的星星个数
      • android:stepSize:步长,1、0.5是常用的
    • 系统样式

      • style=”@android:style/Widget.Holo.RatingBar”

      • style=”@android:style/Widget.RatingBar”

      • style=”@android:style/Widget.Material.RatingBar”

      • style=”@android:style/Widget.DeviceDefault.RatingBar”

      • 以上样式可以根据关键字总结为
        • Holo
        • 默认
        • Material
        • DeviceDefault
      • 还有一些其他标签
        • small 小
        • light 亮
        • Indicator 指示器,不能选择评价了。
    • 自定义样式

      • 系统原本的样式

        <style name="myRatingBar">    <item name="indeterminateOnly">false</item>    <item name="progressDrawable">@drawable/ratingbar</item>    <item name="indeterminateDrawable">@drawable/ratingbar</item>    <item name="minHeight">38dip</item>    <item name="maxHeight">38dip</item>    <item name="thumb">@null</item>    <item name="isIndicator">true</item></style>
      • 个人理解,可忽略
        • 由此可见,控制高的是minHeight,maxHeight;为什么没有宽呢,原来他是一颗星一颗星的计算的,也就是根据你设置的星星个数和图片的宽度自动生成宽度(只能设置高,宽只能根据这个式子计算,设置是无效的。)。
        • indeterminateOnly:设置只采用不精确显示进度模式,一般都不会设置的,所以直接忽略。
        • 由此可见,我们的星星样式是progressDrawable属性设置的
        • minHeight和maxHeigt控制宽高
        • isIndicator 设置是否是指示器,设置为true将无法更改评分
      • 在values目录下style.xml中自定义新的样式。

        <style name="myRatingBar">    <item name="android:progressDrawable">@drawable/hh</item>    <item name="android:minHeight">50dip</item>    <item name="android:maxHeight">50dip</item>    <item name="android:thumb">@null</item>    <item name="android:isIndicator">true</item></style>
      • 自定义新的样式的图片

        <?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/A">    </item>    <item android:id="@android:id/secondaryProgress"        android:drawable="@drawable/B">    </item>    <item android:id="@android:id/progress"        android:drawable="@drawable/C">    </item></layer-list>
      • 自定义的样式图片详解

        • backgroud:是用来填充背景图片的,和进度条非常类似,当我们设置最高评分时(android:numStars),系统就会根据我们的设置,来画出以星星为单位的背景(假如android:numStars=”5”,就会画出5颗灰色的星星)
        • progress:是用来在背景图片基础上进行填充的指示属性(和进度条类似,第一进度位置)
        • secondaryProgress:同progress一样属于第二进度位置(如果不定义这个,进度条拖动,每次就画出一整颗星星(亮),第二进度(暗)没有覆盖掉第一进度之后的位置,从左往右是拖不出来N.5颗星星的,这样评分效果就不完整)
  • 代码部分(java)

    • 监听器

      ratingBar.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() {    @Override    public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) {        Log.e("------------","当前的评价等级:"+rating);    }});