Ответ 1
Попробуйте присвоить высоту RatingBar
в xml-макете, например:
android:layout_height="30dp"
30dp или что вам подходит.
Я реализовал пользовательский RatingBar
в приложении на моих элементах ListView
.
Пользовательский стиль ratingbar_red.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_off" />
<item android:id="@android:id/secondaryProgress" android:drawable="@drawable/star_on" />
<item android:id="@android:id/progress" android:drawable="@drawable/star_on" />
</layer-list>
Здесь часть раскладки ListItem:
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingLeft="15dp" >
<RatingBar
android:id="@+id/li_company_rating"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
android:layout_marginBottom="1dp"
android:isIndicator="true"
android:numStars="5"
android:progressDrawable="@drawable/ratingbar_red"
android:stepSize="1" />
<Button
android:id="@+id/li_company_callbtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="0dp"
android:layout_marginLeft="40dp"
android:contentDescription="@string/ContentDescription"
android:drawableLeft="@drawable/phone_icon"
android:drawablePadding="5dp"
android:onClick="callbtn_Click"
android:text="@string/CallButton"
android:focusable="false"
android:focusableInTouchMode="false" >
</Button>
</LinearLayout>
Это работает, но когда рейтинг установлен, я получаю некоторые странные артефакты изображения; На моем видении появляются две вертикальные линии ниже розовых звезд:
Здесь star_on.png
star_off.png выглядит нормально, а если рейтинг == 0, строки не отображаются.
Я начинаю андроид и не понимаю, в чем проблема.
Попробуйте присвоить высоту RatingBar
в xml-макете, например:
android:layout_height="30dp"
30dp или что вам подходит.
У меня была эта проблема, похоже, что нижний край пользовательского изображения звезды растягивается. Вам не нужно устанавливать layout_height метки метки оценки. Вы можете установить минимальную/максимальную высоту в баре оценки (так же, как высота изображения).
Пример из моих стилей xml.
<style name="GoldRatingBar" parent="@android:style/Widget.RatingBar">
<item name="android:minHeight">@dimen/rating_bar_height</item>
<item name="android:maxHeight">@dimen/rating_bar_height</item>
</style>
Dimens.xml
<dimen name="rating_bar_height">11dp</dimen>
Значение должно соответствовать значению используемого метода. 11 пикселей, поэтому рейтинг_bar_height был установлен в 11dp.
Еще одно простое решение - оставить строку пустых пикселей в изображении звезды с помощью редактора изображений, такого как Photoshop. Тогда повторяющийся или растянутый ряд пикселей в баре оценки будет пустым. Этот вопрос решил мою проблему.
Я решил эту проблему по-другому. Я беру свои собственные звездные png, а в редакторе изображений добавляет прозрачную строку в нижнюю часть изображения. Проблема с вертикальными линиями исчезла на всех экранах!
Это проблема с дизайном Icon. Проблема здесь в дополнении вокруг значка. Если вы создаете пользовательский значок звездочки, убедитесь, что вы оставили пробел между звездой и границей страницы, на которой она находится.
Если вы не знаете, как это сделать, попробуйте Android Asset Studio. Вы можете увидеть что-то наподобие "Прокладка вокруг оптической иконки", чтобы она не опускалась до нуля.
Каждое тело предлагает что-то, но ни одно тело не пытается объяснить, почему это происходит. Я попытаюсь объяснить это сейчас. Конечно, это произойдет только тогда, когда вы пытаетесь настроить изображения баров рейтинга.
Представьте, что у нас есть пользовательское изображение размером 72x72 пикселя, и это наш ресурс для XXXHDPI - (4x).
Вот почему, если вы устанавливаете высоту баров рейтинга, чтобы быть фиксированным размером, все МОЖЕТ быть ОК, но также НЕ МОЖЕТ БЫТЬ ОК. Все это зависит от размера вашего пользовательского изображения.
Я думаю, что есть одно решение, которое будет работать во всех возможных сценариях, и это:
ПРИМЕЧАНИЕ. Во всем этом разговоре мы говорим о dp (пикселей плотности) не в px, потому что, если мы предоставим все эти ресурсы изображения в каждой отдельной папке res, у нас будет возможность работать с dp не с px. Надеюсь, последнее предложение ясно и понятно.
EDIT: Другой возможный способ - оставить небольшое заполнение (пустое пространство), возможно, 1px или 2px внизу вашего пользовательского изображения. В этом случае в представлении RatingBar НЕ будут отображаться эти пиксели артефактов, потому что они будут взяты из части заполнения вашего пользовательского изображения, что на самом деле является просто пустыми (прозрачными) пикселями. Я лично думаю, что это не лучший способ, потому что дополнение к изображениям создаст некоторое пространство (дополнение) между RatingBar и остальными видами внутри макета. В этом случае у вас не будет абсолютно полного контроля над пространством Views, потому что небольшая часть была жестко закодирована внутри пользовательского изображения (эти 2 px padding).
Только 2 пиксельных отступов в звезде изображения в Photoshop. padding in xml не работает, просто добавьте звездное изображение в Photoshop. он работает очень хорошо.
Я исправил одну и ту же проблему, уменьшив "layout_height", так как высота моего изображения была меньше высоты, чем у меня в layout_height.
Такая же проблема. В моем случае
Поместить пользовательские звездообразные изображения в папку /Drawable
и установите "android:layout_height="30dip"
отлично работает!!
Я наблюдал за проблемой из-за векторной прорисовки. Как только я добавил соответствующие изображения в формате png, он начал работать. Добавил это как ответ, так как это может быть полезно для тех, кто сталкивается с той же проблемой.