2

我发现自己在这里有点困惑。我对 android/java 开发相当陌生,所以请在这里帮助确定我做错了什么。我已经在 google、android dev 和 stack 中进行了积极的检查,但在这方面找不到太多信息。

我有一个带有数字作为 theRating 的字符串变量。例如 2.5(满分 10 分) 我正在尝试使用 ratingbarstylesmall 来显示它...它仅用于显示而不是评级。

RatingBar rb = new RatingBar(this, null, android.R.attr.ratingBarStyleSmall);
rb.setIsIndicator(true);
rb.setNumStars(5);
rb.setStepSize((float) 0.5);
rb.setMax(10);
rb.setRating(Integer.parseInt(theRating));
llTextEtc.addView(rb);

星星在 LienarLayout (llTextEtc) 中加载良好,显示在正确的位置,这是我想要的正确样式的星星(小)但是......

这是完全随机的。有的显示 8 颗星,有的显示 15 颗星,然后返回 7 颗星,以此类推。完全随机。我究竟做错了什么?

多谢你们

更新:在接受的答案的帮助下:添加了一个 LinearLayout 来保存带有 wrap_content 布局的评级栏。否则父级(滚动视图)变成了 wrap_content。

LinearLayout llRating = new LinearLayout(this);
RatingBar rb = new RatingBar(this, null, android.R.attr.ratingBarStyleSmall);
  rb.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
  rb.setIsIndicator(true);
  rb.setNumStars(5);
  rb.setRating(Float.parseFloat(theRating)/2);
llRating.addView(rb);
llTextEtc.addView(llRating);

setStepSize 和 setMax 也被删除,Rating 被设置为浮点数而不是整数。星星被计算然后设置。当 isIndicator 为真时,stepSize 和 Max 没有帮助。

4

1 回答 1

2

我注意到这里有几个问题。首先也是最重要的,您需要将布局宽度设置为 WRAP_CONTENT 以使其正常工作。以下来自开发指南:

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).

其次,我注意到您已将 设置stepSize为 afloat并且您正在使用 a 设置评级Interger。我会首先将 URL 提要中的值转换为 a Float,然后在将其传递给评级栏之前对其进行验证。

于 2012-05-20T04:52:29.477 回答