如何使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
从所有列中stretchCoulumns
, RatingBar
根据android:numStars
值显示
另一种可能性是您正在使用列表视图的适配器中的评级
View android.view.LayoutInflater.inflate(int resource, ViewGroup root, boolean attachToRoot)
下面的参数是所有属性正常工作所必需的:
- 将
root
设置parent
- boolean
attachToRoot
为false
例如: convertView = inflater.inflate(R.layout.myId,parent,false);