一 、效果如图所示:
布局代码实现:
1. <?xml version="1.0" encoding="utf-8"?> 2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3. xmlns:app="http://schemas.android.com/apk/res-auto" 4. xmlns:tools="http://schemas.android.com/tools" 5. android:layout_width="match_parent" 6. android:layout_height="match_parent" 7. tools:context=".StarActivity"> 8. <RatingBar 9. android:id="@+id/rb_star" 10. android:layout_width="wrap_content" 11. android:layout_height="wrap_content" 12. android:numStars="5" 13. android:stepSize="0.5" 14. android:indeterminate="false" 15. android:rating="3" 16. /> 17. </LinearLayout>
其中属性如下:
- numStars :设置星的个数,默认为5颗星
- rating:默认点亮几颗星
- indeterminate:默认为false,表示星数可以改变,设置为true 星数不能改变
- stepSize:每次至少选择的星数,默认为0.5颗
StarActivity具体代码:
具体详解已经在注释中给出:
1. @Override 2. protected void onCreate(Bundle savedInstanceState) { 3. super.onCreate(savedInstanceState); 4. setContentView(R.layout.activity_star); 5. 6. rb_star = findViewById(R.id.rb_star); 7. 8. //获取选中的星数 9. String state = String.valueOf(rb_star.getRating()); 10. //获取每次至少改变几颗星 11. String step = String.valueOf(rb_star.getStepSize()); 12. //获取当前进度 13. String progress = String.valueOf(rb_star.getProgress()); 14. Toast.makeText(this, "获取选中的星数:" + state, Toast.LENGTH_SHORT).show(); 15. Toast.makeText(this, "每次改变的星数:" + step, Toast.LENGTH_SHORT).show(); 16. Toast.makeText(this, "获取当前进度:" + progress, Toast.LENGTH_SHORT).show(); 17. //设置评分改变监听器 18. rb_star.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() { 19. @Override 20. public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) { 21. //获取当前进度 22. int progress1 = ratingBar.getProgress(); 23. Toast.makeText(StarActivity.this, "获取当前进度"+progress1, Toast.LENGTH_SHORT).show(); 24. } 25. }); 26. } 27. }
效果展示:
注意:这里的当前进度指的是,如果每次至少增加默认的0.5颗星,一颗星,则相当于2个进度值。