Каркас приложения для поддержки нескольких экранов

94

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

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

Мой вопрос в том, есть ли правильный поток или архитектура, которым нужно следовать, чтобы соответствовать требованиям?

введите описание изображения здесь

Помните, что у нас есть планшеты разного размера и разрешения.

Я знаю, что разработчик Android содержит эту информацию, но мое мнение основано на реализации.

Насколько я знаю, я понял, что для разработки графики для Android даже Программист должен знать концепцию проектирования.

Мохаммед Ажаруддин Шейх
источник
14
Ребята, вы уверены, что этот вопрос неконструктивный?
Мохаммед Ажаруддин Шейх
6
Я считаю, что это очень конструктивно. Хотел бы узнать причины голосов против.
Ленивый ниндзя
11
@MKJParekh возьмите MicroMax Funbook gsmarena.com/micromax_funbook_p300-4701.php 7", 480X800, Ldpi (133 dpi) , подскажите в какой категории (drawble-large или Ldpi или если Android v3.0 sw-480) он упадет?
Мохаммед Ажаруддин Шейх
1
@LazyNinja - причина отрицательных голосов - сумасшедшие и сумасшедшие. Кто просто думает, что может задавать только конструктивные вопросы: p
AZ_
1
@AZ_ :) Мы использовали эту структуру res в папке res drawable drawable-hdpi drawable-hdpi-v11 drawable-hdpi-v9 drawable-large drawable-large-hdpi drawable-ldpi drawable-mdpi drawable-mdpi-v11 drawable-small drawable- xhdpi drawable-xhdpi-v11 drawable-xxhdpi drawable-xxhdpi-v11 layout layout-small layout-sw530dp layout-sw720dp layout-xlarge values ​​values-sw530dp values-sw720dp values-v14 values-xlarge и используются четко определенные размеры в xml из папки значений . FYKI наше приложение поддерживает более 5к типов устройств.
MKJParekh

Ответы:

147

Наконец, создали структуру, которая обрабатывает макеты и значки для нескольких экранов.

Android обобщает отображение устройства по категориям на основе двух параметров:

  • Размер экрана, физический размер дисплея (по диагонали)
  • Плотность экрана, физическая плотность пикселей дисплея (в пикселях на дюйм или ppi) `

Чтобы быстро определить размер и плотность экрана, установите приложение « Какой у меня размер » для Android.

Размер экрана

Android определяет четыре общих размера экрана:


 Qualifier           Size

 small               ~3 inches (approx) 
 normal              ~4 inches (approx) 
 large               Exceeds 4 inches    
 xlarge              Exceeds 7 inches  
  • Большинство телефонов классифицируются как маленькие или обычные (примерно от 3 до 4 дюймов по диагонали). Но сейчас есть много телефонов с большим экраном, таких как Galaxy S4, HTC One, Xperia Z.
  • Маленький планшет, такой как Samsung Galaxy Tab, классифицируется как большой (больше 4 дюймов).
  • Очень большой размер применяется к большим устройствам, например к большим планшетам.

Android определяет четыре обобщенных плотности экрана:


 Qualifier         Description         Nominal value

 ldpi              low density          120 ppi
 mdpi              medium density       160 ppi
 hdpi              high density         240 ppi
 xhdpi             extra high density   320 ppi

Обычно:

  • размер экрана больше всего влияет на макеты вашего приложения
  • плотность экрана больше всего влияет на ваше изображение и графические ресурсы

Он перечислен здесь процентную разницу экрана устройства в

  • Ldpi- 75%
  • Mdpi - 100% (база по данным сайта разработчика Android)
  • HDPI - 150%
  • XHdpi- 200%

введите описание изображения здесь

Но, как мы знаем сейчас, большая часть устройств поставляется с 480X800, поэтому я рассматриваю это как базовое устройство, поэтому нашему новому расчету понравится этот

  • Ldpi- 50%
  • МДПИ - 66,67%
  • HDPI - 100%
  • XHdpi - 133,33%

Это означает, что сначала значок и дизайн будут созданы только для 480X800, а затем для остальных (т.е. Ldpi, Mdpi, Xhdpi).

Существуют изображения, которые являются общими для всех макетов и должны быть одинаковыми по цвету и форме (без сложной формы, без кривой), поэтому мы создаем изображения такого типа, 9patchкоторые нужно поместить в папку с возможностью рисования (без суффикса). Чтобы создать изображение 9Patch, вы можете использовать DrawNinePatch или BetterNinePatch.

Теперь просто переименуйте свои изображения на основе стандартов Android и завершите свое приложение, hdpiа затем просто возьмите drawable-hdpiпапку и откройте Adode Photoshop (рекомендуется), создайте действие нескольких размеров (просто измените размер в соответствии с процентным соотношением), как только действие будет создано для всех размеров, а затем просто выполните Пакетная автоматизация и предоставление источника (drawable-hdpi) и назначения (drawable-ldpi, drawable-mdpi, drawable-xdpi).

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

Как только вы закончите создание всех изображений, обновите свой проект и протестируйте его.

Иногда может быть вероятность того, что макет, поддерживающий экран (xhdpi, hdpi, mdpi), может быть вырезан на маленьком экране (ldpi), поэтому для обработки этого просто создайте для него отдельную папку макета (layout-small) и добавьте ScrollView(в основном). Это оно.

Таблетки Таблетки делятся на два размера.

  1. 7 дюймов (1024X (600–48 (панель навигации))) = 1024X552 (большой вытяжной)
  2. 10 дюймов (1280X (800–48 (панель навигации))) = 1280X752 (drawable-xlarge)

В этом нам нужно создать изображения для обоих экранов и просто поместить их соответственно

Таким образом, в нашем приложении будет эта папка для поддержки нескольких экранов.

drawable
drawable-ldpi
drawable-mdpi
drawable-hdpi
drawable-xhdpi
drawable-large
drawable-xlarge

будет более квалификационная комбинация с Screen size and Screen density

drawable-large-ldpi
drawable-large-mdpi
drawable-large-hdpi
drawable-large-xhdpi

больше квалификатора с Screen density and Version

drawable-ldpi-v11
drawable-mdpi-v11
drawable-hdpi-v11
drawable-xhdpi-v11

и еще квалификатор с Screen size and Version

drawable-large-v11
drawable-xlarge-v11

и еще квалификатор с Smallest width concept(SW)

 drawable-sw???dp

Более того, в Android V3.0 Honeycomb они представили новую концепцию, SW(smallest width)в которой устройства категоризированы по ширине экрана, поэтому, если мы создаем папку с именем, drawable-sw360dpтогда устройство с разрешением 720dp (шириной или высотой) будет использовать ресурс из этой папки.

например, чтобы найти суффикс Samsung Galaxy S3 dp для drawable-sw? dp
Со ссылкой на расчет DP , если вы хотите поддерживать свой макет или рисовать на S3, тогда в расчетах говорится

px = ширина устройства = 720
dpi = плотность устройства = 320

формула дана

    px = dp * (dpi / 160)

заменяя формулу, потому что у нас есть значение px

    dp = px / (dpi / 160)

теперь оцениваю,

     dp= 720 / (320/160);
     dp=360. 

так drawable-sw360dpсделаю работу

Получите конфигурацию устройства из GsmArena Sameway, вы также можете создать папку в соответствии с версией Android API устройства, то есть drawable-hdpi-v11`, чтобы устройство, имеющее API11 и Hdpi, использовало эти ресурсы.

Дополнительные советы:

  • Используйте относительные макеты, dp, sp и mm.

    dp units - независимые от устройства пиксели, нормализованные до 1 физического пикселя на экране 160 ppi, т.е. средней плотности. Масштабируется во время выполнения. Используйте для размеров элемента экрана

    sp units - масштабированные пиксели, указанные как значения с плавающей запятой, основанные на единицах dp, но дополнительно масштабированные для настройки размера шрифта пользователя. Масштабируется во время выполнения. Используйте для размеров шрифта

    вы всегда должны использовать RelativeLayout для макетов; AbsoluteLayout устарел и не должен использоваться.

  • Используйте соответствующие форматы изображений - PNG или JPEG

    Android "prefers" PNG for bitmap image files, "accepts" JPEG, and "discourages" GIF.

    Однако PNG и JPEG не являются эквивалентами. У них разные качества, и PNG не всегда лучше:

    JPEG может предложить до 50% уменьшения размера файла по сравнению с PNG, что важно, если ваше приложение интенсивно использует изображения.

    Более качественный JPEG с потерями может выглядеть лучше, чем сильно сжатый PNG без потерь при том же размере файла.

  • Добавляйте метки к изображениям и графике для отладки

  • Используйте элемент supports-screen

  • Настройте свои эмуляторы с использованием реальных значений устройства

    Обычно настольные системы отображают 72ppi (Mac) или 96ppi (Windows, Linux). По сравнению с мобильными дисплеями настольные дисплеи всегда имеют низкую плотность.

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

    В Eclipse легко создать несколько эмуляторов (в строке меню Eclipse выберите Window> AVD Manager> New ), настроенных со значениями для реальных устройств:

    Назовите эмулятор реального устройства, которое он эмулирует. Укажите разрешение, не используйте встроенные общие размеры. Установите плотность устройства, соответствующую реальному устройству (на панели «Аппаратное обеспечение» установите для свойства абстрактного ЖК-дисплея реальную плотность, всегда целочисленное значение)

    При запуске устройства всегда выбирайте «Масштабировать отображение до реального размера» и вводите реальный размер экрана в дюймах.

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

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

Вот данные, собранные в течение 7-дневного периода, заканчивающегося 1 октября 2012 г. Чтобы увидеть последнюю статистику о версии платформы Android, перейдите сюда

В зависимости от размера экрана

введите описание изображения здесь

На основе плотности экрана

введите описание изображения здесь

горячо
источник
2
Для samsung galaxy tab 7 "мы должны хранить изображения в разделе drawable-large-hdpi, иначе изображение будет растягиваться или сжиматься.
rajpara
@rajpara есть много комбинаций и перестановок, мы включим все такие случаи позже.
Мохаммед Ажаруддин Шейх
1
см. @AlexBonel, да, я согласен с вами, но мой главный девиз - осознавать, как можно что-то делать, когда дело доходит до поддержки многоэкранного режима. Можно изменить / манипулировать этим потоком / концепцией, потому что вышесказанное предназначено для прояснения исходной проблемы. Кроме того, я тоже делаю модификации, основанные на дизайне приложения. Ваш пост дал мне понять, что вы поняли концепцию. Надеюсь, вы поняли мою точку зрения.
Мохаммед Ажаруддин Шейх
1
Хороший ответ. После долгих и стольких дней поиска причин возникновения этих исключений, я получил этот пост как лучший ответ с отличным примером и объяснением. Например, рассмотрите 7-дюймовый планшет Halo Value. PPI = 133. Разрешение = 480 * 800. Размер = 7 дюймов. Если мы рассматриваем mdpi в качестве основы, он должен принимать размер, определенный в values-sw480, но он принимает размер из values-sw600. Не понимаю, почему это происходит. Большое спасибо за ваш пост. Сэкономьте время и устраните путаницу. Думаю, это должно быть на официальном сайте Android. Цените ваши усилия.
Встреча
1
Думаю, это лучший ответ, который я когда-либо видел. Я давно ищу такой ответ. И наконец я понял. Спасибо всем, кто внес свой вклад в этот ответ, чтобы сделать его более понятным.
Hiren Dixit
1

Дизайнеры должны создавать базовые проекты

base size of mdpi devices * density conversion factor of highest supported density bucket
Размер основного экрана составляет 320 X 480 пикселей, а уровни плотности следующие:

  • ldpi: 0,75
  • mdpi: 1.0 (базовая плотность)
  • hdpi: 1,5
  • xhdpi: 2,0
  • xxhdpi: 3.0
  • xxxhdpi: 4.0

А для решения лишнего свободного места на устройствах Android следует использовать растягиваемые компоненты в обоих направлениях (по горизонтали и вертикали). Подробная информация доступна здесь:

http://vinsol.com/blog/2014/11/20/tips-for-designers-from-a-developer/

Алок Вайш
источник