Размеры различных экранов

Интерфейс, диалоги, темы, стили, меню
Ответить
Аватара пользователя
alexmx
Сообщения: 193
Зарегистрирован: 10 мар 2014, 08:14

Размеры различных экранов

Сообщение alexmx » 28 янв 2015, 12:49

Доброго времени суток.
Пишу кастомизированный view на весь экран. При различных экранах хочу определить коэффициент от эталонного размера к используемому.

Концептуально это логично???

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Размеры различных экранов

Сообщение altwin » 28 янв 2015, 13:08

Если это игра то пишется она не средствами sdk и вопросов быть не может.
Обычное активити делается full screen путем установки соответствующего флага, либо темы. Единственное что необходимо это кастомизировать view элементы под указанные размеры
A set of six generalized densities:
ldpi (low) ~120dpi
mdpi (medium) ~160dpi
hdpi (high) ~240dpi
xhdpi (extra-high) ~320dpi
xxhdpi (extra-extra-high) ~480dpi
xxxhdpi (extra-extra-extra-high) ~640dpi
ровно также вы можете просто подготовить различные layout.
Получить размеры экрана можно к примеру так - http://stackoverflow.com/a/6589124/2611075 , но зачем оно вам надо?
Изображение

Аватара пользователя
alexmx
Сообщения: 193
Зарегистрирован: 10 мар 2014, 08:14

Re: Размеры различных экранов

Сообщение alexmx » 28 янв 2015, 13:16

altwin писал(а):Если это игра то пишется она не средствами sdk и вопросов быть не может.
Обычное активити делается full screen путем установки соответствующего флага, либо темы. Единственное что необходимо это кастомизировать view элементы под указанные размеры
A set of six generalized densities:
ldpi (low) ~120dpi
mdpi (medium) ~160dpi
hdpi (high) ~240dpi
xhdpi (extra-high) ~320dpi
xxhdpi (extra-extra-high) ~480dpi
xxxhdpi (extra-extra-extra-high) ~640dpi
ровно также вы можете просто подготовить различные layout.
Получить размеры экрана можно к примеру так - http://stackoverflow.com/a/6589124/2611075 , но зачем оно вам надо?
Это не игра. Но содержит достаточное количество анимированных объектов, так же есть зависимость с векторами. Собственно все координаты я получаю из векторов.

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Размеры различных экранов

Сообщение altwin » 28 янв 2015, 13:24

Используйте независимые единицы измерения. dp или sp.

в любом случае по ссылке выше показанно как получить размер экрана и вы всегда к примеру можете сохранить значение в константу и использовать для расчетов, но подобное решение должно быть последним в списке варриантов.
Последний раз редактировалось altwin 28 янв 2015, 13:29, всего редактировалось 1 раз.
Изображение

Аватара пользователя
alexmx
Сообщения: 193
Зарегистрирован: 10 мар 2014, 08:14

Re: Размеры различных экранов

Сообщение alexmx » 28 янв 2015, 13:28

В смысле получить допустим количество dp на экране, а потом определять свои переменные?

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Размеры различных экранов

Сообщение altwin » 28 янв 2015, 13:30

alexmx писал(а):В смысле получить допустим количество dp на экране, а потом определять свои переменные?
dp - вы должны использовать для размеров своих объектов, а android сам разберется как отобразить его одинаково для экранов разного размера. http://startandroid.ru/ru/materialy/pam ... en-density

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

Аватара пользователя
alexmx
Сообщения: 193
Зарегистрирован: 10 мар 2014, 08:14

Re: Размеры различных экранов

Сообщение alexmx » 28 янв 2015, 13:42

Это в принципе то же самое что я и предлагал. В любом случае мне возвращаться к пикселям.
Так как сюда dp не подсунешь напрямую:

Код: Выделить всё

canvas.drawLine(xC, yC, x, y, p_blac);
придется писать что то вроде

Код: Выделить всё

 //переводим dp в пиксели
    public float convertDpToPixel(float dp,Context context){
        Resources resources = context.getResources();
        DisplayMetrics metrics = resources.getDisplayMetrics();
        return dp * (metrics.densityDpi/160f);
    }

Ответить