编辑
在代码中设置可绘制的进度存在一些问题.您的drawable在XML中使用时可以工作.问题似乎围绕设置适当的属性.如果我有时间,我可以进一步研究或者其他人有想法. (检查你的XML,有一个错字:“customm”而不是“custom”.我已在下面更正了.)
(对于API级别21及更高级别,您可以执行以下操作:
在MainActivity.java中:
RatingBar ratingBar = new RatingBar(this, null, 0, R.style.myRatingBar);
在styles.xml中:
@drawable/custom_ratingbar_menu
但这不是一般解决方案,所以我更喜欢以下内容.)
与此同时,您可以通过从XML中扩展RatingBar并将其添加到您的布局而不是新的RatingBar(this)来完成您想要的任务.通过这种方式,您可以使用XML文件中的属性.这可以解决您的问题.
定义一个仅包含评级栏的XML布局文件,如下所示:
rating_bar.xml
android:id="@+id/modelRatingBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:progressDrawable="@drawable/custom_ratingbar_menu" />
可绘制文件与您定义的文件非常相似.我使用了一个不同的图标,因为我没有访问你的图标:
custom_ratingbar_menu.xml
android:id="@android:id/background"
android:drawable="@drawable/custom_empty_menu" />
android:id="@android:id/secondaryProgress"
android:drawable="@drawable/custom_empty_menu" />
android:id="@android:id/progress"
android:drawable="@drawable/custom_full_menu">
custom_empty_menu.xml
xmlns:android="http://schemas.android.com/apk/res/android">
android:state_window_focused="true"
android:drawable="@android:drawable/star_off" />
android:state_window_focused="true"
android:drawable="@android:drawable/star_off" />
android:state_window_focused="true"
android:drawable="@android:drawable/star_off" />
custom_full_menu.xml
xmlns:android="http://schemas.android.com/apk/res/android">
android:state_window_focused="true"
android:drawable="@android:drawable/star_on" />
android:state_window_focused="true"
android:drawable="@android:drawable/star_on" />
android:state_window_focused="true"
android:drawable="@android:drawable/star_on" />
最后,主要活动是onCreate():
MainActivity#的onCreate
@Override
protected void onCreate(Bundle savedInstanceState) {
RelativeLayout myLayout = new RelativeLayout(this);
super.onCreate(savedInstanceState);
setContentView(myLayout);
// Your loop would go here...
RatingBar ratingBar = (RatingBar) getLayoutInflater()
.inflate(R.layout.rating_bar, myLayout, false);
myLayout.addView(ratingBar);
ratingBar.setNumStars(5);
ratingBar.setStepSize(0.5f);
ratingBar.setRating(2.0f);
}
老答案,但仍然坚持.
The number of stars set (via setNumStars(int) or in an XML layout) will be shown when the layout width is set to wrap_content (if another layout width is set, the results may be unpredictable).
您正在执行以下操作. (宽度和高度不是wrap_content.)
layoutParam = new RelativeLayout.LayoutParams(metrics.widthPixels / 6 , metrics.heightPixels / 32);
myLayout.addView(ratingBar, layoutParam);
相反,执行以下操作可能会获得您想要的结果,或者至少可以获得您想要的星星数量.
layoutParam = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,RelativeLayout.LayoutParams.WRAP_CONTENT);
myLayout.addView(ratingBar, layoutParam);
我建议你暂时放弃可绘制的进度并获得星数和评级,然后介绍drawable.
如果这不起作用,您可以发布custom_ratingbar_menu吗?