java starrating_java – setNumStars和setRating在自定义RatingBar中不起作用

编辑

在代码中设置可绘制的进度存在一些问题.您的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吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值