如何在 RatingBar 中设置星星的自定义大小
Posted
技术标签:
【中文标题】如何在 RatingBar 中设置星星的自定义大小【英文标题】:How to set the custom size of the stars in RatingBar 【发布时间】:2012-09-05 03:30:31 【问题描述】:我已经添加了样式
<style name="myRatingBar" parent="@android:style/Widget.RatingBar">
<item name="android:minHeight">32dp</item>
<item name="android:maxHeight">32dp</item>
</style>
但是,我收到的不是缩放的星星:
有没有办法改变星星的大小?
【问题讨论】:
您可以简单地将android:minHeight="32dp"
添加到<RatingBar>
标签。
【参考方案1】:
另一种方法是缩放小部件:
android:scaleX="0.5"
android:scaleY="0.5"
【讨论】:
(警告)这个解决方案看起来不错,但也有一个缺点。它不会改变实际的触摸区域,因此在用户评分时可能会不自然。【参考方案2】:Android 不会缩放评分栏图标。当您减少minHeight
和maxHeight
时,android 将始终裁剪图标,如图所示。它的解决方法似乎是唯一的一种解决方案,即为具有所需尺寸的星星提供您自己的图标,并将minHeight
和maxHeight
设置为图标的大小。
【讨论】:
如果您在应用的不同部分需要不同的星号?你需要新的资产吗?如果还支持不同尺寸的平板电脑呢?现在我有8套星支持?图像应该像 ImageView 一样缩放到视图,而不是相反。 好吧,我知道这个问题已经很久没有问过了,但我有一点相关的事情,准确地说是标准星形图标的大小是多少 @android:style/Widget.RatingBar " 和小星星样式 "?android:attr/ratingBarStyleSmall"。你知道这些图标放在哪里吗? 我创建了一种方法,您可以在其中为 RatingBar 设置自己的图像,并为星形图标设置自定义颜色叠加。通过一些修改,您可以设置自定义大小和高度,而不会对实际布局大小产生任何异常,也可以修改每个星级的填充。 ***.com/a/37460679/1299158【参考方案3】://你也可以试试
<style name="myRatingBar" parent="@android:style/Widget.RatingBar.Indicator">
<style name="myRatingBar" parent="@android:style/Widget.RatingBar.Small">
参考:/android-sdk/platforms/android-10/data/res/values/styles.xml
<style name="Widget.RatingBar">
<item name="android:indeterminateOnly">false</item>
<item name="android:progressDrawable">@android:drawable/ratingbar_full</item>
<item name="android:indeterminateDrawable">@android:drawable/ratingbar_full</item>
<item name="android:minHeight">57dip</item>
<item name="android:maxHeight">57dip</item>
<item name="android:thumb">@null</item>
</style>
<style name="Widget.RatingBar.Indicator">
<item name="android:indeterminateOnly">false</item>
<item name="android:progressDrawable">@android:drawable/ratingbar</item>
<item name="android:indeterminateDrawable">@android:drawable/ratingbar</item>
<item name="android:minHeight">38dip</item>
<item name="android:maxHeight">38dip</item>
<item name="android:thumb">@null</item>
<item name="android:isIndicator">true</item>
</style>
<style name="Widget.RatingBar.Small">
<item name="android:indeterminateOnly">false</item>
<item name="android:progressDrawable">@android:drawable/ratingbar_small</item>
<item name="android:indeterminateDrawable">@android:drawable/ratingbar_small</item>
<item name="android:minHeight">14dip</item>
<item name="android:maxHeight">14dip</item>
<item name="android:thumb">@null</item>
<item name="android:isIndicator">true</item>
</style>
【讨论】:
好的。每当我将 minHeight 和 maxHeight 更改为较小的值时,我都会收到附图中的星星。图片似乎没有缩放,我必须通过提供我自己的具有所需大小的图标来自定义评分栏。【参考方案4】:你解决了你的问题。但这可能对其他人有所帮助。
我有同样的问题。我得到的所有解决方案都不适用于多种屏幕尺寸。花了几个小时后,我以以下解决方案结束。
只需获取您想在运行时使用的可绘制高度并将其设置为 RatingBar。这是示例代码。
Drawable starDrawable = getResources().getDrawable(R.drawable.YOUR_IMAGE);
int height = starDrawable.getMinimumHeight();
LayoutParams params = (LayoutParams) ratingBar.getLayoutParams();
params.height = height;
ratingBar.setLayoutParams(params);
【讨论】:
谢谢兄弟,最好的解决方案;) @Ketan Ahir & Swayam 宽度是多少?我有非常小的自定义可绘制对象,我想适合屏幕任何知道答案的人请告诉我。 你知道我如何以编程方式设置每颗星或特定星的大小,比如 5 颗星中的第 3 颗吗?【参考方案5】:也许我们可以使用 android 提供小尺寸评分星的另一种替代方案。 将 style="@style/Widget.AppCompat.RatingBar.Small" 添加到 RatingBar。
<RatingBar
android:layout_
android:layout_
android:layout_marginTop="@dimen/list_item_margin"
android:layout_marginLeft="@dimen/list_item_margin"
android:numStars="5"
android:isIndicator="true"
style="@style/Widget.AppCompat.RatingBar.Small"/>
【讨论】:
【参考方案6】:Look at this 小样式的自定义评分栏。
我认为您必须为 Rating Bar 使用自定义样式。 Here 就是例子。
【讨论】:
small 款式太小了。如何设置默认星星的不同大小? @MarcinS。我添加了另一个链接【参考方案7】:您可以在 RatingBar 的 XML 代码中设置它,使用 scaleX 和 scaleY 进行相应调整。 “1.0”将是正常大小,“.0”中的任何内容都会减小它,大于“1.0”的任何内容都会增加它。
您也可以参考使用该库的链接。对于自定义评分栏,单击此link 并获取自定义评分栏并享受评分栏。
<RatingBar
android:id="@+id/ratingBar"
android:layout_
android:layout_
android:scaleX="0.5"
android:scaleY="0.5" />
【讨论】:
【参考方案8】:这并不完全是一个答案,但我想展示一个替代方案。使用一个名为 Iconify 的库,它允许您在 Android 应用程序上使用可缩放的矢量图标,并且通过一种简单的方法,您可以创建带有图标的超棒评分栏。
方法
public static String montarEstrellasValoracion(float valoration,int starSize)
String result="";
float cont=1f;
for(float i=1f;i<=valoration;i++)
if(valoracion==0)
break;
cont=i;
if((cont+0.5f)>=(valoration) && valoracion!=5f)
result+="fa-star "+starSize+"dp ";
result+="fa-star-half-o "+starSize+"dp ";
cont++;
break;
else if((cont+0.5f)<(valoration) && (cont+1f)>(valoration) && valoration!=5f)
result+="fa-star "+starSize+"dp ";
result+="fa-star "+starSize+"dp ";
cont++;
break;
if(cont<=5)
result+="fa-star "+starSize+"dp ";
for(float j=cont;j<5f;j++)
result+="fa-star-o "+starSize+"dp ";
if(valoration==0)
result+="fa-star-o "+starSize+"dp";
return result;
然后在onCreate方法上:
IconTextView valoracion = (IconTextView)item.findViewById(R.id.id_icon_textview);
valoracion.setText(montarEstrellasValoracion(valoration,15));
valoracion.setTextColor(Color.parseColor("#000");
这些图标来自另一个很棒的网站Font Awesome
希望这对任何人都有帮助!
【讨论】:
【参考方案9】: <RatingBar
android:id="@+id/AVL_rating"
style="?android:attr/ratingBarStyleSmall"
android:layout_
android:layout_
android:layout_below="@+id/ASD_cardlayout"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:layout_marginTop="@dimen/_10sdp"
android:isIndicator="true"
android:numStars="5"
android:rating="5.0"
android:secondaryProgressTint="@color/clr_red"
android:stepSize="1.0" />
【讨论】:
【参考方案10】:除了xleon显示的缩放,设置transformPivotX="0dp",然后设置自定义高度。
android:scaleX="0.7"
android:scaleY="0.7"
android:transformPivotX="0dp"
android:
【讨论】:
【参考方案11】:只需在样式中添加font-size
ppt :style='font-size: 1.7vw'
【讨论】:
这是 android,不是 css。以上是关于如何在 RatingBar 中设置星星的自定义大小的主要内容,如果未能解决你的问题,请参考以下文章