Я действительно запутался в квалификаторах Android.
Я хочу создать индивидуальный дизайн для RatingBar
. Поэтому я создал файл rating_bar.xml
и поместил его в папку drawable
. Вот источник:
<?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>
У меня звездный дизайн только для дисплеев xhdpi. Я подумал, что если я помещу изображения star_on и star_off в папку drawable-xhdpi, все будет автоматически изменено для всех различных плотностей (mdpi и hdpi). Да, он изменил размер, но у меня есть некоторые артефакты для hdpi и mdpi. То же, что и здесь: Артефакты пользовательского изображения RatingBar для Android Я попробовал решения, которые были описаны там, но мне ничего не помогло. На устройствах xhdpi у меня нет артефактов, а на устройствах mdpi и hdpi артефакты есть.
Затем я решил поместить изображения star_on и star_off в папку drawable-nodpi. Таким образом, я получил хороший результат без каких-либо артефактов для экранов xhdpi и hdpi, но для экранов mdpi изображения были слишком большими.
Затем я решил скопировать изображения star_on и star_off в папку drawable-mdpi и уменьшить размер изображений. Тоже не помогло.
Затем я помещаю большие изображения звезд в папки xhdpi и hdpi, а маленькие изображения звезд - в папку mdpi. Я думал, что если я запущу свое приложение на mdpi, будут выбраны изображения устройств из drawable-mdpi. Но похоже, что Android выбирает изображения из hdpi или из папки xhdpi и автоматически масштабирует их для экрана mdpi, потому что у меня снова есть артефакты. Я также попытался поместить небольшие изображения в папку с возможностью рисования. Тоже не помогло.
Итак, как Android выбирает ресурсы? Я подумал, что если у меня есть ресурсы в drawable, drawable-mdpi, drawable-hdpi и drawable-xhdpi, то Android попытается найти ресурс в папке с той же плотностью, что и на устройстве. А если такого ресурса нет, то он берется из папки drawable.