如何制作更小的RatingBar?

Cle*_*lem 129 android android-widget android-styles

我在布局中添加了RatingBar:

<RatingBar 
    android:id="@+id/ratingbar"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:numStars="5"
    android:stepSize="1.0"
    />  
Run Code Online (Sandbox Code Playgroud)

但评级栏的默认样式太大.
我试着通过添加android风格来改变它:style="?android:attr/ratingBarStyleSmall"

但结果太小,无法使用此属性设置费率.

我该怎么办?

Vai*_*ani 193

如何粘贴这里 给出的代码......

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

一个完整的明星

空星

第二步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>
Run Code Online (Sandbox Code Playgroud)

第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>
Run Code Online (Sandbox Code Playgroud)

第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"    
/>  
Run Code Online (Sandbox Code Playgroud)

  • 谢谢一堆.然而,只是一个小评论:你不需要半星形象.它将根据进度自动生成. (8认同)
  • 不要这样:<item android:id ="@ + android:id/secondaryProgress"android:drawable ="@ drawable/star_empty"/>是"@ drawable/star_half"/>或者你叫什么? (7认同)
  • 完美的工作:)但我有2个问题.. numStars不再工作,即使我设置最大和最小宽度我也不能让它更大 (3认同)

Far*_*ray 105

默认的RatingBar小部件是sorta'lame.

?android:attr/ratingBarStyleIndicator除了?android:attr/ratingBarStyleSmall您已经熟悉的" " 之外,源代码还会引用样式" " . ratingBarStyleIndicator稍微小一点,但它仍然非常难看,评论指出这些风格"不支持互动".

你可能会更好地自己动手.http://kozyr.zydako.net/2010/05/23/pretty-ratingbar/上有一本不错的指南,展示了如何做到这一点.(我自己还没有这样做,但是会在一天左右的时间里尝试.)

祝好运!

ps很抱歉,我要发布一个链接到你的源码,但我是一个新用户,不能发布超过1个URL.如果你在源代码树中挖掘它,它位于frameworks/base/core/java/android/widget/RatingBar.java

  • 如果我们设置指标属性**android:isIndicator ="false"**我们将与它进行交互.. (7认同)
  • 链接坏了. (4认同)

Loo*_*oii 69

只需使用:

android:scaleX="0.5"
android:scaleY="0.5"
Run Code Online (Sandbox Code Playgroud)

根据您的需要更改比例因子.

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

android:transformPivotX="0dp"
Run Code Online (Sandbox Code Playgroud)

  • 我通过`codeandroid:scaleX ="0.75"解决丑陋(右)填充android:scaleY ="0.75"android:layout_marginRight =" - 25dp"` (6认同)

zya*_*mys 42

没有必要添加一个监听器?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" />
Run Code Online (Sandbox Code Playgroud)

  • isIndicator是关键! (3认同)

Bou*_*aad 19

操作系统的小工具

<RatingBar
    android:id="@+id/ratingBar"
    style="?android:attr/ratingBarStyleSmall"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" 
    />
Run Code Online (Sandbox Code Playgroud)

  • 在给出上述代码时,评级栏不可点击. (2认同)

Moh*_*ikh 15

申请这个.

<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" />
Run Code Online (Sandbox Code Playgroud)

  • 如果你想点击工作使用android:isIndicator ="false" (4认同)

use*_*075 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>
Run Code Online (Sandbox Code Playgroud)

在我的活动中:

    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; 
        } 
    });
Run Code Online (Sandbox Code Playgroud)

我希望这有助于其他人.绝对比绘制自己的更容易(虽然我发现它也有效,但我只想轻松使用星星).


ind*_*oti 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>
Run Code Online (Sandbox Code Playgroud)

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

style = "?android:attr/ratingBarStyleSmall"
Run Code Online (Sandbox Code Playgroud)


chr*_*hry 5

<RatingBar
    android:id="@+id/rating_bar"
    style="@style/Widget.AppCompat.RatingBar.Small"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />
Run Code Online (Sandbox Code Playgroud)