如何制作更小的RatingBar?

我在布局中添加了一个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"

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

我怎么办?

默认的RatingBar小部件是一个'跛脚'。

源代码除了已经熟悉的“ ?android:attr/ratingBarStyleSmall ”之外,还引用了样式“ ?android:attr/ratingBarStyleIndicator ”。 ratingBarStyleIndicator稍小,但仍然非常难看,注释说这些样式“不支持交互”。

你可能会更好地滚动你自己的。 http://kozyr.zydako.net/2010/05/23/pretty-ratingbar/上有一个体面的指南,展示了如何做到这一点。; (我自己还没有做,但一天左右就会尝试。)

祝你好运!

ps对不起,打算发布一个链接到你的源代码,但是我是一个新用户,不能发布超过1个URL。 如果你通过源代码树挖掘,它位于frameworks / base / core / java / android / widget / RatingBar.java

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

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

一个完整的明星

空星

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

只要使用:

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

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

为了在没有创build填充的情况下进行缩放,还要添加

 android:transformPivotX="0dp" 

没有必要添加一个监听器的?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" /> 

小的一个由OS实现

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

我发现比上面提到的更容易的解决scheme,比滚动自己的更容易。 我只是创build了一个小的评级栏,然后添加了一个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/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" /> 

使用此代码

 <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" /> 
 <RatingBar android:id="@+id/rating_bar" style="@style/Widget.AppCompat.RatingBar.Small" android:layout_width="wrap_content" android:layout_height="wrap_content" /> 

尝试使用某个库作为评级栏,例如Android Material Rating Bar库。

1.添加你的依赖关系

  compile 'com.github.PhilJay:MPAndroidChart:v3.0.1' 

2.在styles.xml文件中声明自定义样式:

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

3.在您的布局中添加RatingBar,并通过android:theme属性应用此样式:

  <me.zhanghai.android.materialratingbar.MaterialRatingBar android:id="@+id/rating_bar" android:layout_width="wrap_content" android:layout_height="22dp" android:isIndicator="true" android:numStars="5" android:rating="0" android:stepSize="0.1" android:theme="@style/RatingBar"/> 

如果要使用此库调整RatingBar的大小,只需将android:layout_height和android:layout_width更改为您的首选项。

经过大量的研究,我发现减小自定义评分栏大小的最佳解决scheme就是获取某些大小的进度大小,如下所述:

xxhdpi – 48 * 48像素

xhdpi – 36 * 36像素

hdpi – 24 * 24像素

在风格上,minheight和maxheight分辨率为16dp。

让我知道,如果这不能帮助你得到一个最佳的小尺寸评级酒吧,因为我发现这些尺寸非常兼容,相当于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" /> 

我解决了这个问题如下:style =“?android:attr / ratingBarStyleSmall”