Как сделать меньший рейтингBar?

Я добавил RatingBar в макет:

<RatingBar android:id="@+id/ratingbar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:numStars="5" android:stepSize="1.0" /> 

Но стиль по умолчанию для рейтинговой панели слишком велик.
Я пытаюсь изменить его, добавив стиль андроида: style="?android:attr/ratingBarStyleSmall"

Но результат слишком мал, и невозможно установить ставку с этим свойством.

Как я могу это сделать?

Виджет DefaultBar по умолчанию – sorta 'lame.

Источник ссылается на стиль « ?android:attr/ratingBarStyleIndicator » в дополнение к « ?android:attr/ratingBarStyleSmall », с которым вы уже знакомы. ratingBarStyleIndicator немного меньше, но он все еще довольно уродлив, и в комментариях отмечается, что эти стили «не поддерживают взаимодействие».

Вы, вероятно, лучше катаетесь самостоятельно. На странице http://kozyr.zydako.net/2010/05/23/pretty-ratingbar/ есть достойный вид, показывающий, как это сделать. (Я еще не сделал этого сам, но буду пытаться через день или около того).

Удачи!

Ps Извините, я собирался опубликовать ссылку на источник, чтобы вы могли совать, но я новый пользователь и не могу разместить более 1 URL. Если вы копаете свой путь через исходное дерево, он находится в frameworks / base / core / java / android / widget / RatingBar.java

Как склеить код, приведенный здесь

Шаг 1. Вам нужны ваши собственные рейтинговые звезды в res/drawable

Полная звезда

Пустая звезда

Шаг-2 В res/drawable вам нужно ratingstars.xml как следует …

 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@android:id/background" android:drawable="@drawable/star_empty" /> <item android:id="@android:id/secondaryProgress" android:drawable="@drawable/star_empty" /> <item android:id="@android:id/progress" android:drawable="@drawable/star" /> </layer-list> 

Шаг 3. В res/values вам потребуется styles.xml как следует …

 <?xml version="1.0" encoding="utf-8"?> <resources> <style name="foodRatingBar" parent="@android:style/Widget.RatingBar"> <item name="android:progressDrawable">@drawable/ratingstars</item> <item name="android:minHeight">22dip</item> <item name="android:maxHeight">22dip</item> </style> </resources> 

Шаг 4 В вашем макете …

 <RatingBar android:id="@+id/rtbProductRating" android:layout_height="wrap_content" android:layout_width="wrap_content" android:numStars="5" android:rating="3.5" android:isIndicator="false" style="@style/foodRatingBar" /> 

Просто используйте:

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

Измените коэффициент масштабирования в соответствии с вашими потребностями.

Для масштабирования без создания дополнения слева также добавьте

 android:transformPivotX="0dp" 

Нет необходимости добавлять слушателя к ?android:attr/ratingBarStyleSmall . Просто добавьте android:isIndicator=false и он будет захватывать события кликов, например

 <RatingBar android:id="@+id/myRatingBar" style="?android:attr/ratingBarStyleSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" android:numStars="5" android:isIndicator="false" /> 

Малый один реализует ОС

 <RatingBar android:id="@+id/ratingBar" style="?android:attr/ratingBarStyleSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" /> 

Я нашел более легкое решение, чем я думаю, данное выше и проще, чем сворачивание. Я просто создал небольшую рейтинговую панель, а затем добавил к ней onTouchListener. Оттуда я вычисляю ширину щелчка и определяю количество звезд от этого. Используя это несколько раз, единственный признак, который я нашел, заключается в том, что рисование небольшой рейтинговой панели не всегда получается прямо в таблице, если я не заключу его в LinearLayout (выглядит прямо в редакторе, но не в устройстве) , Во всяком случае, в моем макете:

  <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" > <RatingBar android:id="@+id/myRatingBar" style="?android:attr/ratingBarStyleSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" android:numStars="5" /> </LinearLayout> 

И в рамках моей деятельности:

  final RatingBar minimumRating = (RatingBar)findViewById(R.id.myRatingBar); minimumRating.setOnTouchListener(new OnTouchListener() { public boolean onTouch(View view, MotionEvent event) { float touchPositionX = event.getX(); float width = minimumRating.getWidth(); float starsf = (touchPositionX / width) * 5.0f; int stars = (int)starsf + 1; minimumRating.setRating(stars); return true; } }); 

Надеюсь, это поможет кому-то другому. Определенно легче, чем рисовать свои собственные (хотя я обнаружил, что это тоже работает, но я просто хотел просто использовать звезды).

Примените это.

 <RatingBar android:id="@+id/indicator_ratingbar" style="?android:attr/ratingBarStyleIndicator" android:layout_marginLeft="5dip" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" /> 

Использовать этот код

 <RatingBar android:id="@+id/ratingBarSmalloverall" style="?android:attr/ratingBarStyleSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_marginRight="30dp" android:isIndicator="false" android:numStars="5" /> 
 <RatingBar android:id="@+id/ratingBar1" android:numStars="5" android:stepSize=".5" android:rating="3.5" style="@android:style/Widget.DeviceDefault.RatingBar.Small" android:layout_width="wrap_content" android:layout_height="wrap_content" /> 

Попробуйте использовать некоторую библиотеку для панели рейтинга, например, в библиотеке Android Material Bar .

1.Добавьте в своих зависимостях:

  compile 'com.github.PhilJay:MPAndroidChart:v3.0.1' 

2.Declare пользовательский стиль в файле styles.xml:

 <style name="RatingBar" parent="Theme.AppCompat"> <item name="colorControlNormal">@color/indigo</item> <item name="colorControlActivated">@color/pink</item> </style> 

3. Добавьте RatingBar в свой макет и примените этот стиль с помощью андроида: атрибут темы:

  <me.zhanghai.android.materialratingbar.MaterialRatingBar android:id="@+id/rating_bar" android:layout_width="wrap_content" android:layout_height="22dp" android:isIndicator="true" android:numStars="5" android:rating="0" android:stepSize="0.1" android:theme="@style/RatingBar"/> 

Если вы хотите изменить размер RatingBar, используя эту библиотеку, просто измените андроид: layout_height и android: layout_width в соответствии с вашими предпочтениями.

После многих исследований я нашел, что лучшим решением для уменьшения размера настраиваемых рейтинговых баров является получение размера прогресса, доступного в определенных размерах, как указано ниже:

Xxhdpi – 48 * 48 px

Xhdpi – 36 * 36 px

Hdpi – 24 * 24 px

И в стиле поставить minheight и maxheight как 16 dp для всех Разрешение.

Дайте мне знать, если это не поможет вам получить лучшие малогабаритные рейтинговые бары, так как эти размеры я нашел очень совместимыми и эквивалентными атрибуту ratingbar.small style.

Используйте следующий код для небольшого бара с событием onTouch

 enter code here <RatingBar android:id="@+id/ratingBar" style="?android:ratingBarStyleSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" android:isIndicator="false" android:rating="4" android:stepSize="0.5" /> 
 <RatingBar android:id="@+id/rating_bar" style="@style/Widget.AppCompat.RatingBar.Small" android:layout_width="wrap_content" android:layout_height="wrap_content" /> 

Я решаю этот вопрос следующим образом: style = "? Android: attr / ratingBarStyleSmall"