Android 如何制作RatingBar以显示五星

Android 如何制作RatingBar以显示五星,android,xml,layout,Android,Xml,Layout,下面是如何添加分级条的标准示例。为了控制星星的数量,我尝试使用android:numStars=“5”。问题是,恒星的数量似乎没有任何作用。在纵向布局中,我得到6颗星,当我翻转手机时,我得到大约10颗星。我尝试在加载xml的活动(myBar.setNumStars(5))中设置星星数,但该选项也没有成功 android:layout_alignParentRight="true" 所以我的问题是如何定义我的布局,使它只显示五颗星?SetnumStars似乎不起作用 android:layou

下面是如何添加分级条的标准示例。为了控制星星的数量,我尝试使用android:numStars=“5”。问题是,恒星的数量似乎没有任何作用。在纵向布局中,我得到6颗星,当我翻转手机时,我得到大约10颗星。我尝试在加载xml的活动(
myBar.setNumStars(5)
)中设置星星数,但该选项也没有成功

android:layout_alignParentRight="true" 
所以我的问题是如何定义我的布局,使它只显示五颗星?Set
numStars
似乎不起作用

android:layout_alignParentRight="true" 
提前感谢,,
Roland

默认值在xml布局中设置为。

即使我遇到了@Roland的问题,我还包括了一个名为

android:layout_alignParentRight="true" 
在我的
分级栏中
XML声明。此属性阻止设置所需的星号和设置
NumStars

android:layout_alignParentRight="true" 

随时关注您遇到的问题

评级条.setNumStar文档中说:

android:layout_alignParentRight="true" 
设置要显示的星星数。为了显示这些 正确地说,建议将此小部件的布局宽度包装起来 内容

android:layout_alignParentRight="true" 

因此,将版面宽度设置为
wrap\u content
应该可以解决这个问题。

这对我来说很有效:
RatingBar
应该位于
LinearLayout
内部,而不是将版面宽度设置为
RatingBar
的内容

此外,如果您设置了
布局权重
,这将取代
numStars
属性。


android:layout_alignParentRight="true" 
<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>

我发现
分级栏
被拉伸到了最大星星数,因为它被包含在一个带有属性
android:stretchColumns=“*”
的表中

android:layout_alignParentRight="true" 
当我从所有列中取出
stretchcoumns
后,将根据
android:numStars
值显示
RatingBar
android:layout_alignParentRight="true" 
<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" 
                    />
配置XML文件中的星星数。。。无需在样式或活动/片段中提供它。。。。
重要提示:请确保将宽度设置为未启用包裹内容和权重

我还面临超过指定星号数的问题。为此,我们不想担心任何布局类型,无论是相对布局还是线性布局。只需使用如下宽度:

android:layout_alignParentRight="true" 
ratingBar.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

避免使用匹配父项,并为分级栏填写父项。
希望这些东西会有帮助。

另一种可能是您正在使用列表视图适配器中的评级
android:layout_alignParentRight="true" 
以下参数是所有属性正常工作所必需的:

android:layout_alignParentRight="true" 
  • 将根目录设置为父目录
  • 布尔值
    attachToRoot
    false
  • Ex:
    convertView=充气机。充气(R.layout.myId,父项,false)

    对于我来说,我有一个问题,直到我移除了填充物。看起来某些设备上存在一个bug,它不会改变视图的大小以适应填充,而是压缩内容

    android:layout_alignParentRight="true" 
    

    删除
    padding
    ,改用
    layout\u margin

    要在圆形图中显示简单的星级,只需使用此代码

    android:layout_alignParentRight="true" 
    
    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;
        }
    
    公共静态字符串getIntToStar(intStarCount){
    字符串fillStar=“\u2605”;
    字符串blankStar=“\u2606”;
    弦星=”;
    对于(int i=0;i0;j--){
    星=星。concat(“+blankStar);
    }
    返回星;
    }
    
    像这样使用它

    android:layout_alignParentRight="true" 
    
    setText(getIntToStar(4))

    如果您正在使用

    android:layout_alignParentRight="true" 
    
    android:layout\u width=“match\u parent”

    android:layout_alignParentRight="true" 
    
    使用wrap_内容,它将仅显示集合numStars:)

    android:layout_alignParentRight="true" 
    

    android:layout\u width=“wrap\u content”

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

    android:layout_alignParentRight="true" 
    
    android:rating="5"
    
    编辑:

    android:layout_alignParentRight="true" 
    
    <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" />
    
    
    
    您应该只使用
    numStars=“5”
    ,并设置
    android:layout\u width=“wrap\u content”


    然后,你可以玩弄样式和其他东西,但版面宽度中的“包装内容”才是关键所在。

    这里的实际情况是使用
    包装内容
    ,而不是
    匹配父项
    。如果您将使用
    match\u parent
    布局将填充星星,即使它大于numStars变量。

    如果您将
    分级栏
    包装在
    约束布局
    中,则布局的宽度为
    match\u约束
    ,编辑器预览将显示与其实际宽度成比例的多个星星,无论您设置
    android:numStars
    属性如何。使用
    wrap_content
    获得正确的预览:

    android:layout_alignParentRight="true" 
    
    
    
    谢谢您的回答。问题是您不能使用android:layout\u width=“fill\u parent”,因为分级栏外观忽略了android:numStars othervise.:-/我的要求是设置分级栏,以填充父级或匹配父级,但为固定星,即5。怎么做?有可能吗?@PrashanthDebbadwar你试过3种不同尺寸的“风格”属性吗?e、 g.评级BarStyle这真的应该在文档中。我发现,即使加上一个右边距设置,也会使Numstarst失去吸引力。这是一个很好的建议。我去掉了填充物,终于让它适合我了。@ValentinGalea并不奇怪:评级栏关注自己的宽度,而外部LinearLayout关注填充其父布局宽度。只是帮了一个朋友做了同样的事情。我提出了这种方法,后来发现它是无效的。请举例说明如何将其添加到xml布局中。我已经添加了完整的视图。您能提供一些有用的示例吗?是的,关于match p