Android评级栏“ratingBarStyleSmall”加载随机数量的星星

时间:2012-05-20 02:24:44

标签: java android

我发现自己有点困惑。我是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布局保持评级栏。否则父(scrollview)成为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设置为float而不是integer。计算并设置星星。当isIndicator为真时,stepSize和Max没有帮助。

1 个答案:

答案 0 :(得分: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设置为float,并且您正在使用Interger设置评分。我首先将URL Feed中的值转换为Float,然后在将其传递到评级栏之前对其进行验证。