Мне нужно кодировать макет виджетов Android с помощью DIP / DP (в файлах Java). Во время выполнения , если я код,
int pixel=this.getWindowManager().getDefaultDisplay().getWidth()
;
это возвращает ширину экрана в пикселях (px). Чтобы преобразовать это в dp, я закодировал:
int dp =pixel/(int)getResources().getDisplayMetrics().density ;
это, кажется, не возвращает правильный ответ. Я сделал эмулятор WVGA800 с разрешением экрана 480 на 800. Когда запустил эмулятор и позволил коду напечатать значения pixel и dp, он достиг 320 в обоих. Этот эмулятор имеет 240 точек на дюйм, масштабный коэффициент которого будет 0,75.
android
density-independent-pixel
Khushboo
источник
источник
Я наткнулся на этот вопрос от Google, а позже я нашел простое решение для API> = 13.
Для будущих ссылок:
См. Ссылку на класс конфигурации
Редактировать: Как отметил Ник Baicoianu, это возвращает полезную ширину / высоту экрана (которая должна быть интересной в большинстве случаев). Если вам нужны фактические размеры дисплея, придерживайтесь ответа сверху.
источник
Вам не хватает значения плотности по умолчанию 160.
Другими словами, если вы создадите макет с шириной, равной 160 dip, в портретном режиме, он будет составлять половину экрана на всех устройствах ldpi / mdpi / hdpi (кроме планшетов, я думаю)
источник
DisplayMetrics outMetrics = null; getWindowManager().getDefaultDisplay().getMetrics(outMetrics);
в Activity. Затем,outMetrics.density
даст вам масштабный коэффициент текущего устройства, как указано в документацииКак насчет использования этого вместо?
источник
источник
Ответ в котлине:
источник
Упрощенно для Котлина:
источник
Получите ширину и высоту экрана с точки зрения DP с хорошим украшением:
Шаг 1: Создать интерфейс
Шаг 2: Создать класс реализатора
Шаг 3: Получить ширину и высоту в деятельности:
источник
Если вы просто хотите узнать ширину вашего экрана, вы можете просто найти «наименьшую ширину экрана» в опциях разработчика. Вы даже можете редактировать это.
источник
Попробуй это:
источник
Ваша проблема с приведением числа с плавающей точкой к int, теряющим точность. Вы должны также умножить на коэффициент и не делить.
Сделай это:
источник