Xiaomi минимальная ширина dp что это

Я пытаюсь загрузить некоторые изображения на основе атрибута наименьшей ширины. Для этого я помещал изображения в следующие папки:

drawable-sw320dp drawable-sw360dp drawable-sw480dp drawable-sw600dp drawable-sw720dp

Но мне интересно, какой минимальный размер должен быть во избежание сбоев во время выполнения. Что произойдет, если устройство (если оно существует) с наименьшей шириной 240 запускает мое приложение (возможно, он сбой во время выполнения)? Могу ли я создать папку с именем

drawable-sw0dp

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

Я могу сделать это программно следующим образом, но мне интересно, могу ли я сделать это без необходимости писать код.

DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics); int widthPixels = metrics.widthPixels; int heightPixels = metrics.heightPixels; float scaleFactor = metrics.density; float widthDp = widthPixels / scaleFactor; float heightDp = heightPixels / scaleFactor; float smallestWidth = Math.min(widthDp, heightDp); if (smallestWidth < 320) < //Load necessary images >else if (smallestWidth >= 320 smallestWidth < 360) < //Load necessary images >else if (smallestWidth >= 360 smallestWidth < 480) < //Load necessary images >else if (smallestWidth >= 480 smallestWidth < 600) < //Load necessary images >else if (smallestWidth >= 720) < //Load necessary images >
Лучший ответ:

Как изменить DPI на любом телефоне Андроид?

Я понял, что папка drawable-sw320dp бесполезна. Я помещал изображения в папки с возможностью рисования и drawable-sw320dp и запускал их на устройстве с наименьшей шириной 320 дп. Система загружает изображения из папки с возможностью перемещения, а не в папку drawable-sw320dp. Таким образом, похоже, что 320dp – это минимально возможная ширина в android, и вам нужно поместить изображения в папку для переноски для этих устройств.

Вы должны классифицировать изображения на основе плотности экрана. Не
на основе ширины экрана.

Существует несколько типов плотности экрана: –

ldpi ~ 120dpi

mdpi ~ 160dpi

hdpi ~ 240dpi

xhdpi ~ 320dpi

xxhdpi ~ 480dpi

xxxhdpi ~ 640 dpi

Каждое устройство классифицируется только между ними.

Их папки похожи на: –

вытяжка-ldpi

вытяжка-MDPI

вытяжка-ИПЧР

вытяжка-xhdpi

вытяжка-xxhdpi

вытяжка-xxxhdpi

Изображения для наименьшей плотности экрана в ldpi.
Изображения для наибольшей плотности экрана в xxxhdpi.

Другие вещи будут управляться самим андроидом. Он загрузит правильное изображение в зависимости от плотности экрана

Всегда помните, что mdpi называется базовой линией. Это соотношение 1:1, означает в mdpi, 1 px = 1dp.

Вам нужно поместить ваши другие файлы изображений в свою папку. Нет необходимости создавать папку sw0dp, она будет проигнорирована.

Как найти ДПИ на Xiaomi — Минимальная Ширина

drawable-sw0dp – это допустимое имя папки для ресурсов Android, так что да, вы можете разместить там свои ресурсы, и они будут предпочтительнее ресурсов с таким же именем в папке drawable , как в . Поскольку все устройства Android имеют наименьшую ширину, равную или большую, чем 0, селектор sw0dp будет не исключать любые из них.

Итак, зачем использовать папку drawable-sw0dp и почему не просто drawable один? Предположим, что у вас есть проект для смартфонов и планшетов с некоторыми ресурсами, а некоторые нет. Вы можете поместить все общие ресурсы в папку drawable и все “конкретные” ресурсы в папках drawable-sw0dp (для смартфонов) и drawable-sw600dp (для таблиц). Таким образом, вы можете легко проверить, содержит ли эти две папки одинаковое количество файлов и с теми же именами, и четко видеть, какие ресурсы являются “универсальными”, а какие нет.

Как сохранить номера на Сяоми

В заключение, это только вопрос удобочитаемости. Все будет работать одинаково, если вы поместите все “универсальные” и мультимедийные ресурсы в папку drawable и планшеты в папку drawable-sw600dp (это более интуитивно понятный подход), так что это действительно зависит от вас.

Источник: techarks.ru

Поддержка разных размеров экрана при разработке android приложений

В этом уроке рассказывается, как создать макет, который адаптируется к разным размерам экрана, используя масштабируемые представления, объекты RelativeLayout , квалификаторы размера и ориентации, фильтры псевдонимов и растровые изображений формата nine-patch.

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

В этом уроке описаны следующие аспекты обеспечения совместимости интерфейса с разными экранами:

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

Использование параметров wrap_content и match_parent

Если указать параметры «wrap_content» и «match_parent» вместо строго заданных размеров, в представлениях будет использоваться минимально необходимое место или они будут растягиваться на всю доступную длину и ширину соответственно. Например:

Обратите внимание на то, что в коде учебного приложения размеры компонентов заданы с помощью параметров «wrap_content» и «match_parent» . В результате макет правильно отображается на экранах разных размеров при разных ориентациях.

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

Поддержка разных размеров экрана при разработке android приложений

Рисунок 1. Приложение News Reader при вертикальной (слева) и горизонтальной (справа) ориентации.

Использование объекта RelativeLayout

С помощью вложенных экземпляров объекта LinearLayout и параметров «wrap_content» и «match_parent» можно создавать достаточно сложные макеты. Однако LinearLayout не дает возможности точно управлять взаимным расположением дочерних представлений: в LinearLayout они просто помещаются в ряд друг за другом. Если необходимо расположить дочерние представления иным образом, используйте объект RelativeLayout , позволяющий задать относительные позиции компонентов. Например, одно дочернее представление можно выровнять по левому краю экрана, а другое – по правому.

На рис. 2 показано, как этот макет выглядит на экране QVGA.

Поддержка разных размеров экрана при разработке android приложений

Рисунок 2. Скриншот экрана QVGA (маленького размера).

На рис. 3 показано, как он выглядит на экране с большей диагональю.

Поддержка разных размеров экрана при разработке android приложений

Рисунок 3. Скриншот экрана WSVGA (большего размера).

Обратите внимание: несмотря на изменение размера компонентов их взаимное расположение остается прежним, так как оно задано объектом RelativeLayout.LayoutParams .

Использование квалификаторов размера

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

    res/layout/main.xml , однопанельный макет (по умолчанию):

Обратите внимание, что во втором случае в названии каталога использован квалификатор large . Этот макет будет выбран на устройствах, экраны которых считаются большими (например, 7 дюймов и более). Первый макет (без квалификаторов) будет выбран для устройств с маленьким экраном.

Использование квалификатора Smallest-width

Одной из проблем, с которой сталкивались разработчики приложений для устройств Android версий до 3.2, было слишком общее определение “большого” экрана. Это касалось устройств Dell Streak, первой модели Galaxy Tab и планшетных ПК с экраном размером 7 дюймов. Многие приложения требовалось по-разному отображать на разных устройствах (например, с 5- и 7-дюймовыми экранами), хотя они и относились к одной категории “больших” экранов. В Android версии 3.2 и более поздних доступен квалификатор Smallest-width.

Как перезагрузить Сяоми без экрана

Он позволяет определять экраны с заданной минимальной шириной в dp. Например, типичный планшетный ПК с экраном 7 дюймов имеет минимальную ширину 600 dp, и если вы хотите, чтобы приложение работало на нем в двухпанельном режиме (а на меньших экранах в однопанельном), используйте два макета из предыдущего раздела, но вместо квалификатора размера large укажите sw600dp . В таком случае на экранах, минимальная ширина которых составляет 600 dp, будет использоваться двухпанельный макет.

    res/layout/main.xml , однопанельный макет (по умолчанию):

Это означает, что на устройствах, минимальная ширина экрана которых не меньше 600 dp, будет выбран layout-sw600dp/main.xml (двухпанельный макет), а на экранах меньшего размера – layout/main.xml (однопанельный макет).

Следует учесть, что на Android-устройствах до версии 3.2 квалификатор sw600dp не будет работать, поэтому для них по-прежнему нужно использовать large . Таким образом, вам потребуется еще один файл с названием res/layout-large/main.xml , идентичный файлу res/layout-sw600dp/main.xml . В следующем разделе вы познакомитесь с методом, который позволяет избежать дублирования таких файлов макета.

Использование псевдонимов макетов

Квалификатор Smallest-width работает только на устройствах Android 3.2 или более поздних версий. Для совместимости с более ранними устройствами по-прежнему следует использовать абстрактные размеры (small, normal, large и xlarge). Например, чтобы интерфейс открывался в однопанельном режиме на телефонах и в многопанельном на планшетных ПК с 7-дюймовым экраном, телевизорах и других крупных устройствах, подготовьте следующие файлы:

  • res/layout/main.xml: однопанельный макет;
  • res/layout-large: многопанельный макет;
  • res/layout-sw600dp: многопанельный макет.

Последние два файла идентичны: один из них предназначен для устройств Android 3.2 и новее, а второй для более старых планшетных ПК и телевизоров на платформе Android.

Чтобы не создавать дубликаты файлов и упростить процесс поддержки приложения, используйте псевдонимы. Например, можно определить следующие макеты:

  • res/layout/main.xml (однопанельный макет);
  • res/layout/main_twopanes.xml (двухпанельный макет).

Затем добавьте следующие два файла:

Содержание последних двух файлов одинаково, но сами по себе они не определяют макет. Они служат для того, чтобы назначить файл main в качестве псевдонима main_twopanes . Так как в них используются селекторы large и sw600dp , они применяются к планшетным ПК и телевизорам на платформе Android независимо от версии (для версий до 3.2 используется large , а для более новых – sw600dp ).

Использование квалификаторов ориентации

Хотя некоторые макеты одинаково хорошо смотрятся в вертикальной и горизонтальной ориентациях, в большинстве случаев интерфейс все же приходится адаптировать. Ниже показано, как изменяется макет в приложении News Reader в зависимости от размера и ориентации экрана.

  • Маленький экран, вертикальная ориентация: однопанельный вид с логотипом.
  • Маленький экран, горизонтальная ориентация: однопанельный вид с логотипом.
  • Планшетный ПК с 7-дюймовым экраном, вертикальная ориентация: однопанельный вид с панелью действий.
  • Планшетный ПК с 7-дюймовым экраном, горизонтальная ориентация: двухпанельный вид с панелью действий.
  • Планшетный ПК с 10-дюймовым экраном, вертикальная ориентация: двухпанельный вид (узкий вариант) с панелью действий.
  • Планшетный ПК с 10-дюймовым экраном, горизонтальная ориентация: двухпанельный вид (широкий вариант) с панелью действий.
  • Телевизор, горизонтальная ориентация: двухпанельный вид с панелью действий.

Каждый из этих макетов определен в XML-файле в каталоге res/layout/ . Чтобы сопоставить их с определенными конфигурациями экрана, в приложении используются псевдонимы:

После того как все возможные макеты определены, остается сопоставить каждый из них с подходящей конфигурацией, используя квалификаторы конфигураций. Воспользуемся псевдонимами макетов:

Использование растровых изображений nine-patch

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

Xiaomi 11 t pro 12 256гб обзор

Если использовать для компонентов, размеры которых меняются, обычные изображения, то они будут равномерно сжиматься и растягиваться, и результат будет далек от идеального. Решением являются растровые изображения формата nine-patch – специальные PNG-файлы, содержащие информацию о том, какие области можно растягивать, а какие нет.

Создавая растровые изображения для масштабируемых компонентов, обязательно используйте формат nine-patch. На рис. 4 показано обычное растровое изображение (увеличенное в 4 раза для наглядности), которое мы переведем в формат nine-patch.

Поддержка разных размеров экрана при разработке android приложений

Рисунок 4. button.png

Поддержка разных размеров экрана при разработке android приложений

Рисунок 5. button.9.png

Также обратите внимание на расширение .9.png . Оно должно быть задано именно в таком виде, чтобы система могла определить, что это формат nine-patch, а не обычный PNG-файл.

Поддержка разных размеров экрана при разработке android приложений

Рисунок 6. Кнопки разных размеров с файлом фона button.9.png в формате nine-patch.

Источник: www.fandroid.info

Правильно ли я понимаю dp/dip в Android?

Конкретное число пикселей в 1 dp зависит от PPI (pixels per inch, он же DPI) экрана.
Т.е. если PPI равен 320, то в 1dp будет 2 пикселя (320/160).
Отсюда можно сделать вывод, что указав размер элемента в 160dp, реальный размер элемента на любом экране будет равен 1 дюйму. Ведь 160dp это 160 штук по 1/160 части дюйма, а это и есть 1 дюйм. А сколько в этом дюйме окажется пикселей зависит от PPI.

Например, в 8dp устройства с PPI=320 окажется 16 пикселей, с PPI=480 будет 24. Но конечные физические размеры 8dp будут одинаковыми — это всегда будет 8/160 дюйма экрана не зависимо от PPI.

Еще раз тоже самое: взяв линейку и начав мерить размеры элементов заданные в dp, везде будут примерно одинаковые физические размеры элемента. При этом масштабирования происходить не будет: кнопка занимающая пол экрана на маленьком устройстве, на большом экране будет занимать меньше места, но физические размеры этих кнопок будут одинаковые.

Я правильно понял?

  • Вопрос задан более трёх лет назад
  • 906 просмотров

2 комментария

Оценить 2 комментария

Источник: qna.habr.com

Рейтинг
( Пока оценок нет )
Загрузка ...
Китай Покупай