Почему некоторые мобильные телефоны 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
, поэтому имейте в виду, что ваши выталкиваемые из любой папки будут автоматически масштабироваться при использовании оттуда.