我在Java中设置自定义ratingBar时遇到问题.问题是setNumStars和setRating不起作用.虽然我已经将速率设置为0.0f,但我只是在屏幕上看到一个完全标记的星.
这是代码:
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
chapter1 = new Chapter(this);
android.widget.RelativeLayout.LayoutParams layoutParam = new RelativeLayout.LayoutParams(metrics.widthPixels,metrics.heightPixels);
myLayout.addView(chapter1,layoutParam);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
RatingBar ratingBar = new RatingBar(this);
ratingBar.setProgressDrawable(ResourcesCompat.getDrawable(getResources(),R.drawable.custom_ratingbar_menu,null));
ratingBar.setNumStars(3);
ratingBar.setRating(0.0f);
layoutParam = new RelativeLayout.LayoutParams(metrics.widthPixels / 6,metrics.heightPixels / 32);
layoutParam.setMargins(70 + chapter1.getLeft() + wSize * j,50 + chapter1.getTop() + hSize * i + (metrics.heightPixels / 6),0);
myLayout.addView(ratingBar,layoutParam);
}
}
我们在How to create Custom Ratings bar in Android中使用了接受的answer_ratingarbar_menu答案
这是custom_ratingbar_menu:
它是customm_empty_menu:
这是custom_full_menu:
在代码中设置可绘制的进度存在一些问题.您的drawable在XML中使用时可以工作.问题似乎围绕设置适当的属性.如果我有时间,我可以进一步研究或者其他人有想法. (检查你的XML,有一个错字:“customm”而不是“custom”.我已在下面更正了.)
(对于API级别21及更高级别,您可以执行以下操作:
在MainActivity.java中:
RatingBar ratingBar = new RatingBar(this,null,R.style.myRatingBar);
在styles.xml中:
与此同时,您可以通过从XML中扩展RatingBar并将其添加到您的布局而不是新的RatingBar(this)来完成您想要的任务.通过这种方式,您可以使用XML文件中的属性.这可以解决您的问题.
定义一个仅包含评级栏的XML布局文件,如下所示:
rating_bar.xml
可绘制文件与您定义的文件非常相似.我使用了一个不同的图标,因为我没有访问你的图标:
custom_ratingbar_menu.xml
custom_empty_menu.xml
custom_full_menu.xml
最后,主要活动是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吗?