如何在 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" 添加到&lt;RatingBar&gt; 标签。 【参考方案1】:

另一种方法是缩放小部件:

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

【讨论】:

(警告)这个解决方案看起来不错,但也有一个缺点。它不会改变实际的触摸区域,因此在用户评分时可能会不自然。【参考方案2】:

Android 不会缩放评分栏图标。当您减少minHeightmaxHeight 时,android 将始终裁剪图标,如图所示。它的解决方法似乎是唯一的一种解决方案,即为具有所需尺寸的星星提供您自己的图标,并将minHeightmaxHeight 设置为图标的大小。

【讨论】:

如果您在应用的不同部分需要不同的星号?你需要新的资产吗?如果还支持不同尺寸的平板电脑呢?现在我有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 中设置星星的自定义大小的主要内容,如果未能解决你的问题,请参考以下文章

RatingBar设置显示星星个数

如何在swift中设置自定义UITableviewcell的动态高度

自己定义RatingBar,能依据设置改变样式

Android RatingBar 矢量图标未显示

如何在 PrimeNG 中设置我们自己的自定义主题

如何在选中的自定义元框中设置单选按钮?