Как сделать меньшую рейтинговую панель?
я добавил RatingBar в макете:
<RatingBar
android:id="@+id/ratingbar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:numStars="5"
android:stepSize="1.0"
/>
но стиль по умолчанию для строки рейтинга слишком велик.
Я попытался изменить его, добавив стиль android:style="?android:attr/ratingBarStyleSmall"
но результат слишком мал, и невозможно установить скорость с помощью этого свойства.
Как я мог это сделать?
18 ответов:
виджет RatingBar по умолчанию-это своего рода "хромой".
источник ссылается на стиль "
?android:attr/ratingBarStyleIndicator
" в дополнение к "?android:attr/ratingBarStyleSmall
" что вы уже знакомы.ratingBarStyleIndicator
немного меньше, но это все еще довольно уродливо, и комментарии отмечают, что эти стили "не поддерживают взаимодействие".вы, вероятно, лучше-от прокатки самостоятельно. Есть приличный гид на http://kozyr.zydako.net/2010/05/23/pretty-ratingbar/ показывая, как это сделать этот. (Я еще не сделал этого сам, но попытаюсь через день или около того.)
удачи!
p.s. извините, собирался разместить ссылку на источник для вас, чтобы совать вокруг, но я новый пользователь и не могу разместить более 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
и он будет фиксировать события click, например,<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/rating_bar" style="@style/Widget.AppCompat.RatingBar.Small" android:layout_width="wrap_content" android:layout_height="wrap_content" />
Используйте Этот Код
<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" />
лучший ответ для небольшой рейтинговой панели
<RatingBar android:layout_width="wrap_content" style = "?android:attr/ratingBarStyleSmall" android:layout_height="wrap_content" />
хотя ответ Фарри работает,для устройств Samsung RatingBar взял случайный синий цвет вместо определенного мной. Так что используйте
style="?attr/ratingBarStyleSmall"
вместо.
полный код как использовать:
<android.support.v7.widget.AppCompatRatingBar android:layout_width="wrap_content" android:layout_height="wrap_content" style="?attr/ratingBarStyleSmall" // use smaller version of icons android:theme="@style/RatingBar" android:rating="0" tools:rating="5"/> <style name="RatingBar" parent="Theme.AppCompat"> <item name="colorControlNormal">@color/grey</item> <item name="colorControlActivated">@color/yellow</item> <item name="android:numStars">5</item> <item name="android:stepSize">1</item> </style>
после многих исследований я нашел лучшее решение для уменьшения размера пользовательских рейтинговых баров, чтобы получить размер прогресса drawable в определенных размерах, как указано ниже:
xxhdpi-48*48 px
xhdpi-36*36 px
hdpi-24*24 px
и в типе положите minheight и maxheight как dp 16 для всего разрешения.
позвольте мне знать, если это не поможет вам чтобы получить лучший небольшой размер рейтинговых баров, как эти размеры я нашел очень совместимым и эквивалентным ratingbar.небольшой атрибут стиля.
используйте следующий код для небольшой рейтинговой панели с событием 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" />
попробуйте использовать некоторые библиотеки для рейтинговой панели, например Android Материал Рейтинг Бар библиотека.
1.Добавьте в свои зависимости:
compile 'me.zhanghai.android.materialratingbar:library:1.2.0'
2.Объявите пользовательский стиль в ваших стилях.xml-файл:
<style name="RatingBar" parent="Theme.AppCompat"> <item name="colorControlNormal">@color/indigo</item> <item name="colorControlActivated">@color/pink</item> </style>
3.Добавьте панель рейтингов в свой макет и примените этот стиль с помощью атрибута android:theme:
<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"/>
Если вы хотите изменить размер панели рейтингов с помощью этой библиотеки, просто измените android: layout_height и android:layout_width на ваше усмотрение.
лучший ответ я получил
<style name="MyRatingBar" parent="@android:style/Widget.RatingBar"> <item name="android:minHeight">15dp</item> <item name="android:maxHeight">15dp</item> <item name="colorControlNormal">@color/white</item> <item name="colorControlActivated">@color/home_add</item> </style>
пользователей такой
<RatingBar style="?android:attr/ratingBarStyleIndicator" android:layout_width="wrap_content" android:layout_height="wrap_content" android:isIndicator="false" android:max="5" android:rating="3" android:scaleX=".8" android:scaleY=".8" android:theme="@style/MyRatingBar" />
увеличение / уменьшение размеров с помощью scaleX и scaleY стоимостью