Я добавил 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"