如何使一个较小的评级条?

我在布局中添加了一个 收视率:

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

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

我该怎么办?

163226 次浏览

默认的 RatingBar 小部件有点蹩脚。

除了您已经熟悉的“ ?android:attr/ratingBarStyleSmall”之外,源代码还引用了样式“ ?android:attr/ratingBarStyleIndicator”。ratingBarStyleIndicator略小,但仍然相当丑陋,评论指出这些样式“不支持交互”。

你最好自己卷。在 http://kozyr.zydako.net/2010/05/23/pretty-ratingbar/有一个看起来不错的指南,告诉我们如何做到这一点。(我自己还没有这么做,但一天左右就会开始尝试。)

祝你好运!

附注: 对不起,本来想发一个链接到源代码让你查看,但我是一个新用户,不能发布超过1个 URL。如果您深入挖掘源代码树,它位于 Framework/base/core/java/android/widget/RatingBar.java

用这个。

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

如何粘合给定 这里的代码..。

第一步,你需要在 res/drawable中拥有自己的评分明星。

A full star

Empty star

第二步在 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>

第四步在你的布局..。

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

我找到了一个比我想象的更容易的解决方案,比滚动你自己的更容易。我只是创建了一个小的评分栏,然后添加了一个 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;
}
});

我希望这能帮到别人。肯定比画自己的容易(虽然我发现这也有用,但我只是想简单地使用星星)。

操作系统的小型实现

<RatingBar
android:id="@+id/ratingBar"
style="?android:attr/ratingBarStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>

没有必要向 ?android:attr/ratingBarStyleSmall添加侦听器。只需添加 它将捕获点击事件,例如。

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

使用:

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

根据您的需要更改规模因素。

为了不在左侧创建填充而缩放,还需要添加

android:transformPivotX="0dp"

我解决这个问题的方法如下: Style = “ ? android: attr/ratingBarStyleSmall”

使用此代码

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

经过大量的研究,我发现最好的解决方案,以减少自定义评分条的大小是获得进度的大小可绘制在某些尺寸,如下所述:

Xxhdpi-48 * 48像素

Xhdpi-36 * 36 px

Hdpi-24 * 24像素

在风格上,将 minheight 和 maxheight 作为所有分辨率的16 dp。

让我知道,如果这不能帮助你得到一个最好的小尺寸评级酒吧,因为这些大小我发现非常兼容,相当于 ratingbar.small 样式属性。

使用以下代码对 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" />
<RatingBar
android:id="@+id/rating_bar"
style="@style/Widget.AppCompat.RatingBar.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

虽然答案的法里工程,为三星设备 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>

这是我得到的最好的答案

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

使用 缩放规模值增加/减少大小

最佳答案为小的评级条

<RatingBar
android:layout_width="wrap_content"
style = "?android:attr/ratingBarStyleSmall"
android:layout_height="wrap_content" />

它为我工作 评级 bar xml style = “ ? android: attr/ratingBarStyleSmall”添加 this. it will work。

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