Как установить нестандартный размер звезд в RatingBar

Я уже добавил стиль

<style name="myRatingBar" parent="@android:style/Widget.RatingBar">
    <item name="android:minHeight">32dp</item>
    <item name="android:maxHeight">32dp</item>
</style>

Однако вместо масштабированных звезд я получаю обрезанные звезды:

enter image description here

Есть ли способ изменить размер звезд?

Ответы

Ответ 1

Android не будет масштабировать значки баров рейтинга. Когда вы уменьшаете minHeight и maxHeight, андроид всегда обрезает значки, как показано на рисунке. Обходной путь для него и, похоже, единственное решение - предоставить свои собственные значки для звезд с желаемыми размерами и установить для minHeight и maxHeight размер значков.

Ответ 2

Другим подходом будет масштабирование виджета:

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

Ответ 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>

Ответ 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);

Ответ 5

Посмотрите на это Пользовательская рейтинговая панель в малом стиле.

Думаю, вам нужно использовать Custom Style for Rating Bar. Здесь приведен пример.

Ответ 6

Это не совсем ответ, но я хотел бы показать альтернативу. Используя библиотеку под названием 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");

Значки находятся на другом удивительном сайте Шрифт Awesome

Надеюсь, что это поможет любому!

Ответ 7

             <RatingBar
                android:id="@+id/AVL_rating"
                style="?android:attr/ratingBarStyleSmall"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                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" />

Ответ 8

Может быть, мы можем использовать другую альтернативу, что 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"/>

Ответ 9

просто добавьте font-size ppt в стиле: style='font-size: 1.7vw'