Как установить нестандартный размер звезд в 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'