Почему некоторые мобильные телефоны xhdpi не отображают изображения, расположенные только в/res/drawable?

Это сценарий. Есть папки:

  • вытяжка
  • рисуем-ldpi
  • рисуем-MDPI
  • рисуем-ИПЧР
  • draawble-xhdpi

Изображение (обычно фон, но не привязанный к таким изображениям) находится только в /res/drawable.

Я тестирую приложение на Galaxy S3, и фон отображается правильно. Я тестирую HTC One X, и фоновое изображение не отображается.

Если я скопирую изображение с /res/drawable на /res/drawable-xhdpi, One X отобразит изображение.

Мышление логически, это не должно происходить, правильно?! Если в drawable-xhdpi нет изображения, тогда Android должен искать его в других папках, пока он не достигнет значения по умолчанию /res/drawable, и он должен вытащить его оттуда.

Почему это не происходит на некоторых мобильных телефонах?

PS. Я заметил ту же проблему с некоторыми планшетами, но теперь я не могу вспомнить, какие из них.

ПФС. Я упомянул здесь фоновое изображение, но проблема не связана с ним. Это также происходит с другими изображениями. Я знаю, что мобильные телефоны xhdpi имеют проблемы с большими изображениями, и мне не хотелось бы, чтобы вы думали, что проблема связана с слишком большим фоном. Это также происходит с другими изображениями "нормального" размера.

Ответ 1

Почему вы хотите поместить файл изображения в папку с возможностью переноса?

в соответствии с советами, которые я прочитал через Интернет, вы не должны помещать файлы изображений в выпадающую папку.

в выпадающей папке вы помещаете только рисунки типа xml.

если вы хотите поместить файл изображения, поместите его в любую из следующих папок (или добавьте для них дополнительный квалификатор или используйте другие квалификаторы):

  • drawable-nodpi (только для изображений, которые вы не знаете, что должно быть их размера)
  • рисуем-ldpi
  • рисуем-MDPI
  • рисуем-ИПЧР
  • рисуем-xhdpi
  • рисуем-tvdpi

изображения, которые помещаются в выпадающую папку, рассматриваются как значение по умолчанию, которое равно mdpi. поэтому, если вы хотите сохранить файл в той же категории плотности экрана, поместите его в папку drawable-mdpi.

Еще одна причина не помещать изображение в папку с возможностью переноса - это то, что андроид автоматически преобразует файл в 16-битное изображение для некоторых устройств (например, галактики samsung s), что сделает изображение в некоторых случаях ужасным.

здесь ссылка, которая объясняет эту проблему.

Ответ 2

Я сделал проект с возможностью рисования, который находится только в папке "res/drawable", протестировал его на моем One X и подтвердил, что изображение отображается:
https://github.com/lnanek/Misc/tree/master/TestOneXDrawableFolder

Макет:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    xmlns:tools="http://schemas.android.com/tools"  
    android:layout_width="match_parent"  
    android:layout_height="match_parent"  
    tools:context=".MainActivity">
    <ImageView  
        android:src="@drawable/drawableonly"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:layout_centerHorizontal="true"  
        android:layout_centerVertical="true"  
        />
</RelativeLayout>

Ресурсы

res  
res/drawable  
res/drawable/drawableonly.png  
res/drawable-hdpi  
res/drawable-hdpi/ic_launcher.png  
res/drawable-ldpi  
res/drawable-mdpi  
res/drawable-mdpi/ic_launcher.png  
res/drawable-xhdpi  
res/drawable-xhdpi/ic_launcher.png  
res/layout  
res/layout/activity_main.xml  
res/menu  
res/menu/activity_main.xml  
res/values  
res/values/strings.xml  
res/values/styles.xml  
res/values-v11  
res/values-v11/styles.xml  
res/values-v14  
res/values-v14/styles.xml  

Вы можете попытаться выяснить, что вы делаете, что может привести к другому поведению. Имейте в виду, что наличие "выталкиваемой" папки и папки "drawable-mdpi" является немного странным, потому что по умолчанию загружаемая папка имеет плотность mdpi. Не может быть детерминированным, какой из этих двух будет использоваться. Я знаю, что использование спецификатора плотности автоматически добавляет -v4 в современные средства сборки, чтобы исправить проблемы с Android 1.5, не понимая этих спецификаторов и правильно их обрабатывая, поэтому drawable-mdpi-v4 может считаться более спецификацией и совпадением в сравнении с drawable. Тем не менее, обе папки имеют класс плотности mdpi, поэтому имейте в виду, что ваши выталкиваемые из любой папки будут автоматически масштабироваться при использовании оттуда.