Размер экрана устройства Android с поддержкой больших экранов
Я провел много исследований, но чувствую, что не совсем понял всю систему поддержки экранов разных размеров.
Таким образом, мой дизайнер хочет знать, какие размеры экрана я хочу поддерживать, и он хочет знать, какое разрешение создавать изначально.
Поэтому я предположил, что хочу поддержать следующее,
нормальный размер экрана
MDPI - да HDPI - да XHDPI - да
До сих пор я предполагал следующее,
нормальный экран, MDPI - 320x480 - 160ppi нормальный экран, HDP - 480x800 - 240ppi нормальный экран, HDDP - 640x960 - 320ppi
Проблема в том, как вы определяете ресурсы для экрана? 720x1280? Использую ли я ресурсы, определенные для 640x960?
Что-то вроде S3
4 ответа
Я уже указывал здесь приложение-скелет-на-поддержку-несколько экранов с точки зрения дизайнера.
Здесь указана процентная разница экрана устройства
Ldpi- 75%
МДПи- 100%
HDI-150%
XHdpi- 200%
Но, как мы теперь знаем, большинство устройств поставляются с 480X800, поэтому я считаю, что это устройство на основе, поэтому наш новый расчет будет таким
Лдпи- 50%
Тпд- 66,67%
HDI- 100%
XHdpi - 133,33%
Ты можешь взять XHdpi
как основано, потому что, когда мы увеличиваем меньшее изображение, тогда изображение становится размытым, поэтому начинайте создавать иллюстрации для большего размера, а затем для меньшего.
Теперь об устройствах, которые идут с высоким разрешением 720х1280, т.е. S3
у вас есть классификатор с концепцией наименьшей ширины (SW), представленный в Android V3.0 Honeycomb
вытяжка-SW??? дп
Устройства подразделяются на ширину экрана, поэтому, если мы создаем папку с именем drawable-sw360dp
тогда устройства с 720dp(шириной или высотой) будут использовать ресурс из this
папка.
например, чтобы найти Samsung Galaxy S3 dp к суффиксу drawable-sw?dp
С учетом вычисления DP, если вы хотите поддержать свой макет или сделать его доступным для S3, тогда вычисление говорит
px= ширина устройства = 720
точек на дюйм = плотность устройства = 320
формула дана
px = dp * (dpi / 160)
меняя формулу, потому что у нас есть значение px
dp = px / (dpi / 160)
сейчас оцениваю,
dp= 720 / (320/160);
dp=360.
так drawable-sw360dp
сделает работу для S3
Получите конфигурацию вашего устройства от GsmArena. Таким же образом вы также можете создавать папки для разных устройств (неудобных / последних)
Вы также можете добавить суффикс к этому значению к вашей папке макета тоже layout-sw360dp
Я также согласен с другими людьми, которые разместили ссылку на " Поддержка нескольких экранов" на веб-сайте Android-разработчика, поскольку это отличный ресурс, позволяющий понять разницу между классами (маленькими, обычными, большими) экранов и разной плотностью экранов. (ldpi, mdip, hdpi).
Есть также очень интересная статья о метриках и сетках, которая мне очень помогла.
Вы также должны сохранить шкалу пикселей, чтобы погрузиться в затылок:
ldpi: 1dp = 0.75px
, mdpi: 1dp = 1px
, hdpi: 1dp = 1.5px
а также xhdpi: 1dp = 2px
Мне лично нравится ассоциировать ldpi с разрешением около 240x320, mdpi с 320x480, hdpi с 480x800 и xhdpi с чем-либо большим, например с SGS3.
Например, ссылка на Metrics and Grids гласит, что кнопка должна быть не менее 48dp. Это означает, что если вы хотите создать кнопку с размером 48x48
, что переводится как 48x48 px for mdpi
Вы также должны предоставить графическое изображение 96x96 px for xhdpi
, 72x72 px for hdpi
а также 36x36 px for ldpi
,
Я также предлагаю вам и вашему дизайнеру взглянуть на изображения из 9 патчей и попытаться настроить свой пользовательский интерфейс для этого. Это сделает вашу жизнь разработчика намного менее хлопотной. Причина этого в том, что вы можете создавать изображения небольшого размера, которые могут очень хорошо масштабироваться в вашем приложении.
Это довольно очевидно, вы должны попытаться создать графику с максимально возможным разрешением (например, xhdpi), а затем уменьшить его до hdpi, mdpi и ldpi.
Еще один совет, с которым я столкнулся, к которому у меня больше нет источника, заключается в том, чтобы использовать папку ресурсов в Android, так как это будет намного лучше для производительности, по сравнению с предоставлением только большого изображения, и позволит ОС уменьшать его масштабирование. идти ( Но в этом так посте есть несколько веских аргументов в ответах)
Вы должны попробовать что-то вроде этого: Для преобразования из displayPixels в Pixels
(int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, context.getResources().getDisplayMetrics());
и для пикселей на screenPixels
(pixels / context.getResources().getDisplayMetrics().scaledDensity);
Ты можешь использовать SVG
библиотека для векторной графики и очень полезна для поддержки экранов с несколькими разрешениями, исходный код здесь