Использовать только XHDPI в приложении Android? - PullRequest
46 голосов
/ 14 мая 2011

Если вы планируете поддерживать LDPI, MDPI, HPDI и, возможно, XHDPI в ближайшем будущем, можно ли включать в проект только чертежи XHDPI и разрешать устройствам масштабировать их до желаемого разрешения?

Я проверил изменение размеров элементов в MDPI и HDPI в Photoshop, а затем сравнил результат с элементами XHDPI, измененными только в Android, и я не вижу никакой разницы.Это плохой дизайн, чтобы использовать этот ярлык?Было бы неплохо не менять размеры каждого рисунка на 3 разных разрешения.

Планирование использования целевого SDK составляет 2,1 или 2,2.

BR Emil

Ответы [ 7 ]

25 голосов
/ 14 мая 2011

Я думаю, это хороший путь.Единственный недостаток, который я могу вспомнить, - это нехватка ресурсов на небольших устройствах и возможные артефакты из-за уменьшения масштаба.На самом деле на Google IO этого года Крис Пруэтт рекомендовал встраивать только ресурсы с высоким разрешением и позволить opengl управлять масштабированием.

15 голосов
/ 01 февраля 2012

Начиная с Android 1.6, обрабатываются разные плотности, включая XHDPI (который официально не был добавлен до 2.2).Сначала ваше приложение будет искать изображение, соответствующее его плотности, но оно может просмотреть более крупные «сегменты», такие как XHDPI, а затем выполнить масштабирование для вас.

Лучше всего включить конкретные ресурсы для плотностей, которые вы хотите поддерживать,Изображение размером 100x100 занимает 40 КБ;и изображение размером 200x200 занимает 160 тыс. (без сжатия).Таким образом, любые активы XHDPI, используемые на устройствах MDPI, имеют в четыре раза больший объем данных, который вам необходим, который должен обрабатываться при запуске приложения и подготовке ваших ресурсов.Меньшее использование памяти означает большую эффективность, меньше шансов на исключение OutOfMemoryException.

Кроме того, определенные типы изображений будут выглядеть плохо при автоматическом масштабировании.В частности, на изображениях с тонкими линиями или тонкими узорами их детали будут размыты.Когда вы уменьшаете изображения вручную, вы можете выбрать алгоритм, который наилучшим образом соответствует вашим потребностям (линейный, бикубический, lanczos и т. Д.).

Если вы беспокоитесь о времени, которое требуется для изменения размера самостоятельно, вы можете включить пакетный процесс или использовать такие инструменты, как Nine Patch Resizer: http://code.google.com/p/9patch-resizer/

4 голосов
/ 11 мая 2012

Я тестировал в простом приложении (разработка для Android 2.1), используя только изображения xhdpi, и он отлично работает в малых, средних и высоких разрешениях ... даже я тестировал в Android 2.1 (маленькое разрешение), и он открывает изображение без проблема.

Может быть, что-то с памятью - правда, так что нужно это кому-нибудь проверить.

3 голосов
/ 20 февраля 2014

Я лично обнаружил, что использование только папки xhdpi довольно хорошо работает во многих приложениях, и я большой сторонник этого подхода. В накладных расходах памяти это правда, но с сегодняшними устройствами я бы посчитал это незначительным. Кроме того, я думаю, что после даунскейлинга происходит некоторое кэширование, так как я никогда не замечал какого-либо замедления из-за этого. Включение только одной папки может значительно уменьшить размер вашего APK, что вполне оценят конечные пользователи. Вы должны иметь в виду, что некоторые изображения будут иметь артефакты масштабирования (мелкие шаблоны и прочее), но я лично никогда не сталкивался с чем-то критичным в своих приложениях. Также для кнопок и прочего обязательно используйте 9 патчей, чтобы уменьшить артефакты на закругленных углах, вы даже можете немного уменьшить размер изображения с помощью этого подхода. Уровень API не будет проблемой в старых версиях, так как я думаю, что drawable-xhdpi считается просто рисуемым в версиях, которые его не поддерживают. Не забывайте о шансах определить некоторые простые элементы рисования в xml, например, очень просто создать градиентный фон только с помощью фигур, что позволяет сэкономить пространство и не рисковать масштабированием артефактов.

2 голосов
/ 18 января 2012

Нормально иметь только ресурсы xhdpi.Но обратите внимание, что xhdpi был представлен с уровнем API 9 (пряник).То есть, если вы нацелены на уровни API <= 8, вам нужны как минимум ресурсы hdpi. </p>

2 голосов
/ 18 ноября 2011

XHDPI был представлен только в Android SDK API Level 9 (Gingerbread) (см. http://developer.android.com/reference/android/util/DisplayMetrics.html#DENSITY_XHIGH), поэтому, если вы планируете иметь минимальный уровень SDK менее 9, вам также потребуется предоставить, как минимум, HDPI-элементы для рисования. в противном случае устройства с Froyo или ниже не будут отображать ничего.

Обновление: на самом деле кажется, что версии до Gingerbread будут отображать изображения xhdpi: https://groups.google.com/d/msg/android-developers/yjYO91OmoJ4/v3he0ZbKo-UJ

0 голосов
/ 14 марта 2014

Это утверждение о дополнительном использовании памяти неверно.

Если вы поместите рисованные элементы размером XHDPI в папку MDPI, у вас будут проблемы с памятью.

Но если вы предоставите XHDPI drawables внутри папки XHDPI, то дополнительная память не будет использоваться, так как Android сокращает изображения, пропуская их части.

Это skipping - причина, по которой вам нужно предоставить ничьи для каждой плотности, которую вы планируете поддерживать, чтобы они хорошо выглядели.

С другой стороны, при пониженной дискретизации только определенные изображения будут выглядеть плохо (в основном это маленькие значки), поэтому, если на изображении достаточно данных для отбрасывания, оно будет выглядеть нормально. Или представьте, что у вас есть сетка, которую можно нарисовать, поэтому некоторые линии сетки могут быть отброшены, и изображение будет выглядеть плохо.

В конце концов, вам лучше поэкспериментировать с различными устройствами, затем вы сможете определить, какие вытяжки требуют альтернативных ресурсов для их плотности.

...