如何在RatingBar中设置星星的自定义大小

Mar*_* S. 23 android android-widget

我已经添加了一种风格

<style name="myRatingBar" parent="@android:style/Widget.RatingBar">
    <item name="android:minHeight">32dp</item>
    <item name="android:maxHeight">32dp</item>
</style>
Run Code Online (Sandbox Code Playgroud)

然而,不是缩放星星,我收到了星星:

在此输入图像描述

有没有办法改变星星的大小?

xle*_*eon 30

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

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

  • (注意)这个解决方案看起来不错,但有一个缺点。它不会改变实际的触摸区域,因此用户评分时可能会不自然。 (2认同)

Mar*_* S. 18

Android不会扩展评级栏图标.当你减少minHeightmaxHeightAndroid将始终裁剪图片所示的图标.它的解决方法,似乎是唯一的解决方案是提供自己的图标恒星所需的尺寸和设置minHeight,并maxHeight以图标的大小.

  • 如果您在应用的不同部分需要不同的星号?你需要新资产吗?那些支持不同尺寸的平板电脑怎么样?现在我有8套星星支持?图像应该像ImageView一样缩放到视图,而不是相反. (2认同)

Pad*_*mar 5

//你也可以试试

<style name="myRatingBar" parent="@android:style/Widget.RatingBar.Indicator">

<style name="myRatingBar" parent="@android:style/Widget.RatingBar.Small">
Run Code Online (Sandbox Code Playgroud)

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


Ket*_*hir 5

你解决了你的问题.但这可能有助于其他人.

我有同样的问题.我得到的所有解决方案都不适用于多种屏幕尺寸.花了几个小时后,我结束了以下解决方案

只需获取要在运行时使用的可绘制高度,并将其设置为RatingBar.这是示例代码.

Drawable starDrawable = getResources().getDrawable(R.drawable.YOUR_IMAGE);
int height = starDrawable.getMinimumHeight();
LayoutParams params = (LayoutParams) ratingBar.getLayoutParams();
params.height = height;
ratingBar.setLayoutParams(params);
Run Code Online (Sandbox Code Playgroud)


小智 5

也许我们可以使用另一种选择,即android提供小尺寸的评级星星。将 style="@style/Widget.AppCompat.RatingBar.Small" 添加到 RatingBar。

            <RatingBar
                android:layout_width="100dp"
                android:layout_height="wrap_content"
                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"/>
Run Code Online (Sandbox Code Playgroud)