如何使RatingBar显示五颗星

我正在遵循如何添加RatingBar的标准示例。 要控制星号的数量,我尝试使用android:numStars="5" 。 问题是,明星的数量似乎没有做任何事情。 在肖像布局,我得到6星,当我翻转手机,我得到约10星。 我试图设置加载xml的Activity( myBar.setNumStars(5) )中星号的数量,但是这个选项也没有成功。

所以我的问题是如何定义我的布局,以便它只显示五颗星? 设置numStars似乎不工作。

在此先感谢罗兰

 <RatingBar android:id="@+id/rating" android:layout_width="wrap_content" android:layout_height="wrap_content" style="?android:attr/ratingBarStyleSmall" android:numStars="5" android:stepSize="0.1" android:isIndicator="true" /> 

在代码中

 mRatingBar.setRating(int) 

RatingBar.setNumStar文档说:

设置要显示的星星数量。 为了正确显示这些信息,build议这个小部件的布局宽度是包装内容。

所以将布局宽度设置为wrap_content应该可以解决这个问题。

这对我工作: RatingBar应该在LinearLayout内部,而不是布局宽度设置为包装RatingBar内容。

此外,如果您设置了layout_weight ,则取代了numStars属性。

 <RatingBar android:id="@+id/ratingBar" style="@style/custom_rating_bar" android:layout_width="wrap_content" android:layout_height="35dp" android:clickable="true" android:numStars="5" /> 

configurationXML文件中的星数…不需要在样式或活动/片段….中提供重要提示:请确保您将WIDTH设置为Wrap内容,并且权重未启用

我也面临超过明星的问题。 为此,我们不需要担心任何布局types相对或线性布局。 简单地使用宽度如下:

 ratingBar.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 

避免使用match_parent和fill_parent作为评分栏
希望事情会有所帮助。

即使我正面临着@Roland的问题,我还包括了一个叫做的属性

 android:layout_alignParentRight="true" 

在我的RatingBar在XML中的声明。 这个属性防止设置所需的星星和设置NumStars

保持张贴在你遇到的问题!

对我来说,我有一个问题,直到我删除填充。 它看起来像某些设备上的错误,不会改变视图的大小以适应填充,而是压缩内容。

删除padding ,改为使用layout_margin

默认值是在xml布局中使用andoid:rating设置的。

为了在圆形图中显示简单的星级,请使用此代码

 public static String getIntToStar(int starCount) { String fillStar = "\u2605"; String blankStar = "\u2606"; String star = ""; for (int i = 0; i < starCount; i++) { star = star.concat(" " + fillStar); } for (int j = (5 - starCount); j > 0; j--) { star = star.concat(" " + blankStar); } return star; } 

像这样使用它

button.setText(getIntToStar(4));

如果你正在使用

android:layout_width="match_parent"

使用wrap_content,它只会显示set numStars 🙂

android:layout_width="wrap_content"

您可以在xml布局中添加五颗星的默认评分

 android:rating="5" 

编辑:

 <RatingBar android:id="@+id/rb_vvm" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginBottom="@dimen/space2" android:layout_marginTop="@dimen/space1" style="@style/RatingBar" android:numStars="5" android:stepSize="1" android:rating="5" /> 
 <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" > <RatingBar android:id="@+id/ruleRatingBar" android:isIndicator="true" android:numStars="5" android:stepSize="0.5" style="?android:attr/ratingBarStyleSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> 

我发现RatingBar拉伸到最大数量的星星,因为它被封闭在一个属性为android:stretchColumns = "*"的表格中。

一旦我把stretchCoulumns从所有列中stretchCoulumnsRatingBar根据android:numStars值显示

另一种可能性是您正在使用列表视图的适配器中的评级

 View android.view.LayoutInflater.inflate(int resource, ViewGroup root, boolean attachToRoot) 

下面的参数是所有属性正常工作所必需的:

  1. root设置parent
  2. boolean attachToRootfalse

例如: convertView = inflater.inflate(R.layout.myId,parent,false);