0 голосов
 
1054 просмотра
29.09.2021 / 13:53  wRadchuk

Адаптив макета под разные экраны Android.

Приступил к адаптиву макета под разные разрешения андроид устройств и не могу понять что происходит. Сейчас тестирую 3 экрана: 720х1280, 1080х1920 и 1440х2560. Оказалось что у троих один тип экрана xhdpi. Нашел такую таблицу:
  1. LDPI: Portrait: 200 X 320px
  2. MDPI: Portrait: 320 X 480px
  3. HDPI: Portrait: 480 X 800px
  4. XHDPI: Portrait: 720 X 1280px
  5. XXHDPI: Portrait: 960 X 1600px
  6. XXXHDPI: Portrait: 1440 x 2560px
В ней нет экрана 1080х1920 и также не указаны dpi экранов, но зато есть экран 1440х2560 и он относится к xxxhdpi. Вопрос: Что я делаю не так и как делать правильно адаптив под андроид экраны? Пожалуйста пните в нужном направлении :-)

P.S. Залил на хостинг ImgBB то что у меня выходит сейчас
720x1280, 1080x1920, 1440x2560

P.P.S. Макеты экранов в Figma строились с учетом шапки приложения под экран 720х1280, но вот нижний блок рекламмы туда не входил, соответственно мне пришлось делать не как по дизайну и уменьшить некоторые графические элементы освобождая место под рекламный баннер, сейчас он с visable=gone, но если его включить,
то при исходном и нынешнем размере элементов (скрины выше) он перекрывает кнопку "ОТПРАВИТЬ" которая и так не влазит в экран.
Изм. wRadchuk от 29.09.2021 / 13:56
Ответы
 
1 голос
 
# 29.09.2021 / 14:19  Askalite
DPI — точки на дюйм
Могут существовать большие экраны 1440x2560 MDPI

Разрешение экрана измеряется в пикселах.
Размеры экрана измеряются в дюймах.
Разрешающая способность измеряется в пикселах на дюйм.

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

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

Возьми маленькую картинку 32 на 32 и увеличь в несколько раз. Получишь мыльное изображение.

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

Правильный адаптив учитывает не только dpi, но и процентное соотношение. Вот этот элемент можно ресайзить, а вот это кнопка, она должна иметь одинаковый размер в сантиметрах на всех экранах, чтобы было удобно тыкать и на больших экранах не занимала много места.
Изм. Askalite от 29.09.2021 / 14:20
 
0 голосов
 
# 29.09.2021 / 17:00  Askalite
Качественный адаптивный макет задаётся относительными размерами:

android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0.1"
— последний параметр это вес лэйаута

Также задаются параметры минимальной ширины, высоты, максимальной ширины и высоты.

Модете поиграться с параметром layout_weight. При использовании weight вы можете указать значение height или width = 0dp. В этом случае не будет учитываться содержимое элементов и результат будет более соответствующий коэффициентам веса.
 
0 голосов
 
# 29.09.2021 / 15:25  wRadchuk
Askalite, у меня есть drawable директории от ldpi до xxxhdpi. Насколько мне известно андроид сам берёт с них ресурсы отталкиваясь от DPI устройства. Но так как и на экране в 720x1280, так и на экране в 1440x2560 может быть mdpi, то графика с drawable-mdpi директории может появиться на любом из этих экранов. Я сейчас вожусь с xhdpi где коэффициент равен 2.0, что означает 1dp = 2px. Тогда моя картинка 259x276px должна занять 518x552px при указании ей размера layout_width= 259dp и layout_height=276dp, в таком случаи у меня останется больше половины от экрана 1280 в высоту. Видимо заблуждаюсь? Как я понял этот коэффициент мне не помогает. Нужно как вы пишете высчитывать размер отталкиваясь от DPI устройства. Что я имею сейчас, так это нужную графику для устройств и статичный размер dp в макете xml. Это верная мысль или я снова заблуждаюсь?
Всего: 3

Реклама

Мы в соцсетях

tw tg yt gt