137

我在布局中添加了RatingBar :

<RatingBar 
    android:id="@+id/ratingbar"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:numStars="5"
    android:stepSize="1.0"
    />  

但是评分栏的默认样式太大了。
我尝试通过添加 android 样式来更改它:style="?android:attr/ratingBarStyleSmall"

但是结果太小了,不可能用这个属性设置一个速率。

我该怎么办?

4

18 回答 18

196

如何粘合此处 给出的代码...

步骤1。你需要你自己的评级明星res/drawable...

一颗满星

空星

Step-2 在res/drawable你需要ratingstars.xml如下...

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@android:id/background"
          android:drawable="@drawable/star_empty" />
    <item android:id="@android:id/secondaryProgress"
          android:drawable="@drawable/star_empty" />
    <item android:id="@android:id/progress"
          android:drawable="@drawable/star" />
</layer-list>

步骤 3 在res/values您需要styles.xml如下...

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="foodRatingBar" parent="@android:style/Widget.RatingBar">
        <item name="android:progressDrawable">@drawable/ratingstars</item>
        <item name="android:minHeight">22dip</item>
        <item name="android:maxHeight">22dip</item>
    </style>
</resources>

第 4 步在您的布局中...

<RatingBar 
      android:id="@+id/rtbProductRating"
      android:layout_height="wrap_content"
      android:layout_width="wrap_content"
      android:numStars="5"
      android:rating="3.5"
      android:isIndicator="false"
      style="@style/foodRatingBar"    
/>  
于 2011-07-30T09:29:38.017 回答
109

The default RatingBar widget is sorta' lame.

The source makes reference to style "?android:attr/ratingBarStyleIndicator" in addition to the "?android:attr/ratingBarStyleSmall" that you're already familiar with. ratingBarStyleIndicator is slightly smaller but it's still pretty ugly and the comments note that these styles "don't support interaction".

You're probably better-off rolling your own. There's a decent-looking guide at http://kozyr.zydako.net/2010/05/23/pretty-ratingbar/ showing how to do this. (I haven't done it myself yet, but will be attempting in a day or so.)

Good luck!

p.s. Sorry, was going to post a link to the source for you to poke around in but I'm a new user and can't post more than 1 URL. If you dig your way through the source tree, it's located at frameworks/base/core/java/android/widget/RatingBar.java

于 2010-07-04T03:07:21.507 回答
72

只需使用:

android:scaleX="0.5"
android:scaleY="0.5"

根据需要更改比例因子。

为了在不创建左侧填充的情况下进行缩放,还添加

android:transformPivotX="0dp"
于 2014-08-27T12:40:38.263 回答
44

无需向?android:attr/ratingBarStyleSmall. 只需添加 android:isIndicator=false,它就会捕获点击事件,例如

<RatingBar
  android:id="@+id/myRatingBar"
  style="?android:attr/ratingBarStyleSmall"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:numStars="5"
  android:isIndicator="false" />
于 2013-07-13T18:14:31.650 回答
20

操作系统的小工具

<RatingBar
    android:id="@+id/ratingBar"
    style="?android:attr/ratingBarStyleSmall"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" 
    />
于 2013-06-12T09:21:43.363 回答
16

应用这个。

<RatingBar android:id="@+id/indicator_ratingbar"
    style="?android:attr/ratingBarStyleIndicator"
    android:layout_marginLeft="5dip"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_vertical" />
于 2011-07-30T09:08:12.233 回答
15

我找到了一个比我认为上面给出的解决方案更简单的解决方案,而且比自己动手更容易。我只是创建了一个小的评分栏,然后在其中添加了一个 onTouchListener。从那里我计算点击的宽度并从中确定星星的数量。多次使用后,我发现唯一的怪癖是,除非我将它包含在 LinearLayout 中(在编辑器中看起来正确,但不是设备),否则在表格中绘制小评级栏并不总是正确. 无论如何,在我的布局中:

            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" >
                <RatingBar
                    android:id="@+id/myRatingBar"
                    style="?android:attr/ratingBarStyleSmall"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:numStars="5" />
            </LinearLayout>

在我的活动中:

    final RatingBar minimumRating = (RatingBar)findViewById(R.id.myRatingBar);
    minimumRating.setOnTouchListener(new OnTouchListener()
    { 
        public boolean onTouch(View view, MotionEvent event)
        { 
            float touchPositionX = event.getX();
            float width = minimumRating.getWidth();
            float starsf = (touchPositionX / width) * 5.0f;
            int stars = (int)starsf + 1;
            minimumRating.setRating(stars);
            return true; 
        } 
    });

我希望这对其他人有帮助。绝对比自己画更容易(虽然我发现这也可以,但我只是想简单地使用星星)。

于 2012-09-17T03:31:55.647 回答
6
 <RatingBar
                    android:rating="3.5"
                    android:stepSize="0.5"
                    android:numStars="5"
                    style = "?android:attr/ratingBarStyleSmall"
                    android:theme="@style/RatingBar"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"/>

// if you want to style 

 <style name="RatingBar" parent="Theme.AppCompat">
        <item name="colorControlNormal">@color/colorPrimary</item>
        <item name="colorControlActivated">@color/colorAccent</item>
    </style>

// 为小评分栏添加这些行

style = "?android:attr/ratingBarStyleSmall"
于 2019-02-27T11:33:01.623 回答
5
<RatingBar
    android:id="@+id/rating_bar"
    style="@style/Widget.AppCompat.RatingBar.Small"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />
于 2017-08-17T14:54:21.340 回答
3

我得到的最佳答案

  <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>

像这样的用户

<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" />

通过使用scaleXscaleY值增加/减少大小

于 2018-04-17T10:27:33.817 回答
3

尽管 Farry 的回答有效,但对于三星设备 RatingBar 采用随机蓝色而不是我定义的。所以使用

style="?attr/ratingBarStyleSmall"

反而。

完整代码如何使用它:

<android.support.v7.widget.AppCompatRatingBar
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                style="?attr/ratingBarStyleSmall" // use smaller version of icons
                android:theme="@style/RatingBar"
                android:rating="0"
                tools:rating="5"/>

<style name="RatingBar" parent="Theme.AppCompat">
        <item name="colorControlNormal">@color/grey</item>
        <item name="colorControlActivated">@color/yellow</item>
        <item name="android:numStars">5</item>
        <item name="android:stepSize">1</item>
    </style>
于 2017-12-01T13:51:39.240 回答
3

小型评分栏的最佳答案

<RatingBar
                    android:layout_width="wrap_content"
                    style = "?android:attr/ratingBarStyleSmall"
                    android:layout_height="wrap_content" />
于 2018-05-01T06:02:20.783 回答
2

使用此代码

<RatingBar
    android:id="@+id/ratingBarSmalloverall"
    style="?android:attr/ratingBarStyleSmall"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_centerVertical="true"
    android:layout_marginRight="30dp"
    android:isIndicator="false"
    android:numStars="5" />
于 2016-11-30T09:01:42.533 回答
2
<RatingBar
    android:id="@+id/ratingBar1"
    android:numStars="5"
    android:stepSize=".5"
    android:rating="3.5"
    style="@android:style/Widget.DeviceDefault.RatingBar.Small"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />
于 2017-02-13T09:15:48.727 回答
1

将以下代码用于带有 onTouch 事件的小评分栏

enter code here


<RatingBar
            android:id="@+id/ratingBar"
            style="?android:ratingBarStyleSmall"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:isIndicator="false"
            android:rating="4"
            android:stepSize="0.5" />
于 2017-08-17T14:13:32.320 回答
0

它在评级栏中为我工作 xml style="?android:attr/ratingBarStyleSmall" 添加 this.it 会工作。

于 2018-06-04T13:29:51.620 回答
0

经过大量研究后,我发现减小自定义评分栏大小的最佳解决方案是获取可绘制某些尺寸的进度大小,如下所述:

xxhdpi - 48*48 像素

xhdpi - 36*36 像素

hdpi - 24*24 像素

在风格上,所有分辨率的最小高度和最大高度为 16 dp。

让我知道这是否不能帮助您获得最佳的小尺寸评级栏,因为我发现这些尺寸非常兼容并等效于 ratingbar.small 样式属性。

于 2017-07-20T18:59:27.110 回答
-4

我解决了以下问题: style="?android:attr/ratingBarStyleSmall"

于 2015-12-19T08:48:20.017 回答