关于android:如何缩小Ratingbar的大小?

How can I decrease the size of Ratingbar?

我的活动中有一些评分栏。但是这个条形的尺寸太大了,怎么缩小呢?

编辑

感谢Gabriel Negut,我用以下样式做到了:

1
2
3
4
<RatingBar
style ="?android:attr/ratingBarStyleSmall"
android:numStars ="5"
android:rating   ="4" />

现在,尺寸减小了,但是星级数和评级没有生效!!为什么?我有7颗星被选中其中6颗。


我发布的原始链接现在已断开(有充分的理由为什么仅发布链接不是最佳方法)。您必须使用ratingBarStyleSmall或从Widget.Material.RatingBar.Small继承的自定义样式来设置RatingBar的样式(假设您在应用中使用Material Design)。

选项1:

1
2
3
4
<RatingBar
    android:id="@+id/ratingBar"
    style="?android:attr/ratingBarStyleSmall"
    ... />

选项2:

1
2
3
4
5
6
7
8
9
10
11
// styles.xml
<style name="customRatingBar"  
    parent="android:style/Widget.Material.RatingBar.Small">
    ... // Additional customizations
</style>

// layout.xml
<RatingBar
    android:id="@+id/ratingBar"
    style="@style/customRatingBar"
    ... />


这是我的解决方案,经过很多努力以减小尺寸小而没有难看的填充

1
2
3
4
5
6
7
8
9
10
11
 <RatingBar
        android:id="@+id/listitemrating"
        style="@android:attr/ratingBarStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:scaleX=".5"
        android:scaleY=".5"
        android:transformPivotX="0dp"
        android:transformPivotY="0dp"
        android:isIndicator="true"
        android:max="5" />


如果要以小尺寸显示等级栏,则只需将此代码复制并粘贴到项目中。

1
2
3
4
5
6
7
8
9
  <RatingBar
    android:id="@+id/MyRating"
    style="?android:attr/ratingBarStyleSmall"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@id/getRating"
    android:isIndicator="true"
    android:numStars="5"
    android:stepSize="0.1" />


您可以在RatingBar的XML代码中进行设置,并使用scaleXscaleY进行相应调整。 " 1.0 "将是正常大小,"。0 "中的任何内容都会减小它,大于" 1.0 "的任何内容也会增加它。

1
2
3
4
5
6
<RatingBar
  android:id="@+id/ratingBar1"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:scaleX="0.5"
  android:scaleY="0.5" />


下面的代码段为我调整了等级Bar

1
2
3
4
5
6
7
8
9
10
11
<RatingBar
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/ratingBar"
    style="?android:attr/ratingBarStyleIndicator"
    android:scaleX=".5"
    android:rating="3.5"
    android:scaleY=".5"
    android:transformPivotX="0dp"
    android:transformPivotY="0dp"
    android:max="5"/>

enter


工作示例

1
2
3
4
5
6
7
             <RatingBar
                style="@style/RatingBar"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:numStars="5"
                android:rating="3.5"
                android:stepSize="0.5" />

并将其添加到样式xml文件中

1
2
3
4
5
<style name="RatingBar"  
parent="android:style/Widget.Material.RatingBar.Small">
<item name="colorControlNormal">@color/primary_light</item>
<item name="colorControlActivated">@color/primary_dark</item>
</style>

这样您就无需自定义ratingBar。


在这里检查我的答案。实现它的最佳方法。

1
2
3
4
5
6
 <style name="MyRatingBar" parent="@android:style/Widget.RatingBar">
   <item name="android:minHeight">15dp</item>
   <item name="android:maxHeight">15dp</item>
   <item name="colorControlNormal">@color/white</item>
   <item name="colorControlActivated">@color/home_add</item>
</style>

并像

1
2
3
4
5
6
7
8
9
10
<RatingBar
    style="?android:attr/ratingBarStyleIndicator"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:isIndicator="false"
      android:max="5"
      android:rating="3"
      android:scaleX=".8"
      android:scaleY=".8"
      android:theme="@style/MyRatingBar" />

一样使用


1
2
3
4
5
<RatingBar
  style="?android:attr/ratingBarStyleIndicator"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
/>


使用Widget.AppCompat.RatingBar,您可以使用两种样式; IndicatorSmall分别用于大尺寸和小尺寸。请参见下面的示例。

1
2
3
4
<RatingBar
    android:id="@+id/rating_star_value"
    style="@style/Widget.AppCompat.RatingBar.Small"
    ... />

如果您在LinearLayout中使用带有weightSum的"等级"栏。请确保您不要为评级栏分配layout_weight。取而代之的是,在相对布局内部放置评级栏,并赋予相对布局以权重。制作等级栏宽度换行内容。

1
2
3
4
5
6
7
8
9
10
11
12
13
<RelativeLayout
    android:layout_width="0dp"
    android:layout_weight="30"
    android:layout_gravity="center"
    android:layout_height="wrap_content">
        <RatingBar
            android:id="@+id/userRating"
            style="@style/Widget.AppCompat.RatingBar.Small"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:stepSize="1" />
</RelativeLayout>

RatingBar标记中,添加这两行

1
2
style="@style/Widget.AppCompat.RatingBar.Small"
android:isIndicator="false"

RatingBar中提供属性:

1
style="?android:attr/ratingBarStyleIndicator"

如果只需要默认样式,请确保具有以下宽度/高度,否则numStars可能会变得混乱:

1
2
android:layout_width="wrap_content"
android:layout_height="wrap_content"


这对我有用。Check

1
2
3
4
5
6
7
8
9
10
11
12
            android:id="@+id/ratingBar"
            style="?android:attr/ratingBarStyleIndicator"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:numStars="5"
            android:scaleX=".8"
            android:scaleY=".8"
            android:stepSize="0.5"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.543"
            app:layout_constraintStart_toEndOf="@+id/title"
            app:layout_constraintTop_toTopOf="parent" />

对于以编程方式创建评分栏并希望设置小评分栏而不是默认大评分栏的用户

1
2
3
4
5
6
7
8
9
10
11
12
    private LinearLayout generateRatingView(float value){
        LinearLayout linearLayoutRating=new LinearLayout(getContext());
        linearLayoutRating.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT));
        linearLayoutRating.setGravity(Gravity.CENTER);
        RatingBar ratingBar = new RatingBar(getContext(),null, android.R.attr.ratingBarStyleSmall);
        ratingBar.setEnabled(false);
        ratingBar.setStepSize(Float.parseFloat("0.5"));//for enabling half star
        ratingBar.setNumStars(5);
        ratingBar.setRating(value);
        linearLayoutRating.addView(ratingBar);
        return linearLayoutRating;
    }

1
2
3
4
5
6
7
8
 <RatingBar     android:id="@+id/id_tv_rating_bar"
                style="@style/Widget.AppCompat.RatingBar.Small"
                android:layout_width="wrap_content"
                android:layout_height="@dimen/_20sdp"
                android:layout_marginLeft="@dimen/_80sdp"
                android:numStars="5"
                android:paddingTop="@dimen/_5sdp"
                android:rating="5" />

只需使用style="@style/Widget.AppCompat.RatingBar.Small"就可以了!