5

Я пытаюсь понять http://developer.android.com/guide/topics/resources/providing-resources.html#AlternativeResources, и мне интересно, есть ли точка, имеющая как вытягиваемые, так и drawable-ldpi? Причина, по которой я спрашиваю, заключается в том, что я скопировал некоторые мои чертежи из разных примеров. У меня есть значки из темы Holo в drawable-mdpi, drawable-hdpi, drawable-xhdpi, но значок запуска также существует в drawable-ldpi (однако других файлов в drawable-ldpi нет). У меня также есть несколько пользовательских чертежей, которые существуют только в каталоге с возможностью рисования.Есть ли точка с res/drawable-ldpi в android?

Вот пример:

res/drawable/x.png 
res/drawable-ldpi/ic_launcher.png 
res/drawable-mdpi/ic_launcher.png 
res/drawable-mdpi/ic_download.png 
res/drawable-hdpi/ic_launcher.png 
res/drawable-hdpi/ic_download.png 
res/drawable-xhdpi/ic_launcher.png 
res/drawable-xhdpi/ic_download.png 
res/drawable-xxhdpi/ic_launcher.png 

Правильно ли я понимаю, что это плохая конфигурация, как будто мое приложение происходит запустить на ldpi устройстве он будет врезаться, потому что она отсутствует ic_download вытяжки? Итак, каково правильное решение? Я должен изменить размеры всех моих чертежей на ldpi? Или я должен просто добавить самую маленькую существующую версию КАЖДОГО доступного для drawables /, чтобы быть в безопасности?

ответ

16

Только 10% устройств являются ldpi, и это число со временем уменьшается. Источник: http://developer.android.com/about/dashboards/index.html

Не требуется иметь изображения для всех плотностей, достаточно одного. При необходимости система будет масштабировать ее вверх/вниз. Поэтому лучший подход - иметь изображения для максимальной плотности (xhdpi или xxhdpi).

Я лично использую только изображения xhdpi!


Если поместить все изображения на xhdpi папки, приложение не будет врезаться из-за отсутствие изображений на других плотностях. Изображение будет изменено до меньшего размера для всех других плотностей, таким образом, оно не потеряет свои характеристики.

Рекомендации Google полезны, когда вы создаете разные изображения для каждого разрешения, а не просто изменяете его размер. Пример: значок ldpi (36x36) = только простой значок бейсбола/xhdpi (96x96) = летучая мышь, ударяющая по бейсболу

Еще одна деталь, если вы поместили изображение в папку по умолчанию (mdpi), оно увеличит масштаб до 2x для устройств xhdpi, и у вас могут быть проблемы с OOM. Если вы поместите изображение в папку xhdpi, оно уменьшит его на половину.

На практике это не нужно, но вы можете добавить их, если вы настроите небольшое улучшение производительности (очень?), И вы не против большего APK.

+0

Откуда у вас это все? Это общая противоположность тому, что написано здесь или что пишет Google. Вы когда-нибудь смотрели на свое приложение на устройстве с меньшей плотностью? Согласно тому, что я понял, они потерпят неудачу, потому что андроид ищет только плотности, которые <= чем фактические. Также ваш aproach может работать, если вы поместите только один на drawables /, но тогда у вас может возникнуть проблема OutOfMemory. – Gavriel

+0

Ну, 1) Я уже тестировал на всех устройствах (от ldpi до xhdpi, от дешевых телефонов до дорогих телефонов), 2) У меня более 500 тыс. Загрузок в моих приложениях, 3) Я работал на устройстве, 4) Я работаю над компанией, которая разрабатывает приложения для Android, 5) Я работаю с Android с 2009 года. Я уточню свой ответ с более подробной информацией! – thiagolr

+0

Я до сих пор не знаю, что об этом думать. Просто повторите эту страницу: http://developer.android.com/guide/topics/resources/providing-resources.html#AlternativeResources: «Внимание: если все ваши ресурсы используют определитель размера, который больше, чем текущий экран, система не будет их использовать, и ваше приложение будет аварийно завершено во время выполнения (например, если все ресурсы макета отмечены спецификатором xlarge, но устройство является экраном нормального размера). " – Gavriel

1

В устройстве ldpi ваше приложение будет извлекать чертежи из выпадающей папки, если оно не может найти соответствующие чертежи в папке drawable-ldpi, однако это может привести к тому, что OutOfMemoryError будет слишком большим. Вот почему вы должны использовать папку drawable-ldpi с масштабируемыми масштабируемыми размерами.

+0

Но единственный способ не иметь исключений из-за недостающих изображений - либо иметь ВСЕ из них во ВСЕГДА - ??? папок или иметь наименьший из них в drawable (другими словами, каждое изображение должно быть в drawable и, как правило, лучше «переопределить» в другой папке). Правильно ли я понял? – Gavriel

1

Когда Eclipse создает значки запуска, он создает их только для mdpi, hdpi, xhdpi и xxhdpi. Исходя из этого, я бы предположил, что создание значка ldpi не требуется и что mdpi будет автоматически уменьшаться

1

Позвольте мне объяснить, как именно работает иерархия папок и почему важно установить правильное изображение в правильной папке.

Способ, с помощью которого android будет выбирать файл, основан на устройстве, использующем плотность пикселей приложения, он начнется с этой плотности (например, hdpi), если он не найдет ресурс там, он пойдет вниз по всей иерархии до тех пор, пока «по умолчанию» не будет выведено, вы можете потерять ресурсы в разных папках плотности, и ОС не будет жаловаться, но если ресурс не найден в папке по умолчанию, тогда ОС сообщит вам, что есть проблема, есть некоторые трудности чтобы найти ошибки, связанные с этой проблемой, позвольте мне привести пример, скажем, что у вас есть ресурс только в папке drawable-hdpi, компилятор не будет жаловаться, потому что theres ресурс с указанным вами идентификатором и если вы запустите приложение на устройствах hdpi, вы не будет никаких проблем, однако, если приложение работает на устройстве ldpi, приложение выйдет из строя, потому что ОС попытается найти его в папке ldpi, а затем по умолчанию, и ни один из них не будет содержать th e, вызывающий крах, поэтому большинство людей просто пропускают эту часть и устанавливают все в «drawable» (папка по умолчанию), потому что ОС всегда найдет ее там, независимо от того, какую плотность вы работаете, но важный момент, подсчет здесь, когда у вас нет надлежащего ресурса для правильной плотности пикселей, сама ОС будет пытаться «изменить размер» единственного ресурса, найденного с огромным объемом памяти, только из-за вычисления в одном из проекты, в которых я работал, не имея надлежащих ресурсов для правильной плотности пикселей, вызывали OutOfMemoryError, потому что ОС изменяла размеры всех активов, позволяя создавать пробелы для других действий ...

С уважением!

0

Для чего стоит, если вы посмотрите на источник AOSP для KitKat, некоторые из встроенных приложений больше не имеют ресурсов LDPI. Таким образом, я бы сказал, что они больше не требуются.

Смежные вопросы