Как получить плотность экрана программно в Android?
Я имею в виду: Как найти разрешение экрана текущего устройства?
android
dpi
screen-density
Praveen
источник
источник
getDisplayMetrics().xdpi
, которые должны возвращать реальное dpi устройства. Обратите внимание, что это значение не всегда корректно устанавливается на разных устройствах изготовителями, поэтому вы просто не сможете их использовать . Печально, но факт: информация о реальных точках на дюйм недоступна . Источник: groups.google.com/d/msg/android-developers/g56jV0Hora0/…getResources().getDisplayMetrics().xdpi
иgetResources().getDisplayMetrics().ydpi
даст вам фактические горизонтальные и вертикальные плотности , которые в большинстве случаев различны.Ответы:
Вы можете получить информацию на дисплее из структуры DisplayMetrics :
Хотя Android не использует прямое сопоставление пикселей, он использует несколько квантованных значений, независимых от плотности пикселей, а затем масштабируется до фактического размера экрана. Таким образом,
metrics.densityDpi
свойство будет одним изDENSITY_xxx
констант (120
,160
,213
,240
,320
,480
или640
точек на дюйм).Если вам нужна фактическая плотность ОК - пиксельный (возможно для приложения OpenGL) , вы можете получить его от
metrics.xdpi
иmetrics.ydpi
свойств для горизонтальной и вертикальной плотности соответственно.Если вы ориентируетесь API уровней раньше , чем 4.
metrics.density
Свойство с плавающей точкой коэффициент масштабирования от исходной плотности (160dpi). То же значение, предоставленное теперь,metrics.densityDpi
может быть рассчитаноисточник
getWindowManager().getDefaultDisplay().getRealMetrics(metrics);
был официально добавлен в API 17, но я с удивлением обнаружил, что он работает правильно даже на устройстве 4.0, которое я пробовал.Это также работает:
Это даст вам:
0,75 - лдпи
1,0 - т / д
1,5 - HDMI
2.0 - xhdpi
3.0 - xxhdpi
4.0 - xxxhdpi
ref: плотность
ссылка 2
источник
WindowManager
(например, внутри загрузчика). Просто умножьте это на 160tvdpi
. Для получения дополнительной информацииtvdpi
см. ЗдесьЭто будет работать на уровне API 4 и выше.
источник
Ответ Бланделла как статический вспомогательный метод:
источник
Попробуй это:
источник
View
гораздо проще (именно там мне это нужно!)Чтобы получить точек на дюйм:
источник
Вот константы плотности, источник :
Кроме стандартных плотностей, есть 5 промежуточных. Принимая во внимание этот факт, следующий код будет полным рабочим примером:
Кроме того, вы можете найти константы плотности, используя
densityDpi
:источник
Следующий ответ - небольшое улучшение, основанное на ответе qwertzguy.
источник
На самом деле, если вы хотите иметь реальное значение dpi, ответ будет где-то посередине, если вы запрашиваете метрики отображения:
densityDpi * 160 даст вам значения / рекомендации, какую плотность вы должны использовать
как указано в предыдущих сообщениях
но
dm.xdpi
не всегда дает вам РЕАЛЬНОЕ dpi данного дисплея: Пример:так что, возможно, реальное dpi дисплея должно быть Density * xdpi .. но я не уверен, что это правильный способ!
источник
Это должно помочь в вашей деятельности ...
ВЫВОД :
источник
источник
Если вы хотите получить плотность из службы, она работает следующим образом:
источник
Вы должны попробовать это. Только что добавили метод, который найдет и покажет тост. То, в какую категорию попадает устройство.
http://www.androidwarriors.com/2016/01/how-to-find-different-devices-screen.html
источник
Это должно работать.
источник
Еще один ответ:
источник
Еще один способ получить плотность загрузки устройства:
Создавайте
values
папки для каждой плотностиДобавьте строковый ресурс в их соответствующие
strings.xml
:Тогда просто получите строковый ресурс, и вы получите свою плотность:
Если плотность больше, чем
XXXHDPI
она будет по умолчаниюXXXHDPI
или если она ниже, чемHDPI
она будет по умолчаниюMDPI
Я не учел
LDPI
, потому что для моего варианта использования это не нужно.источник
Попробуй это...
В котлине
Вы можете позвонить по
println("density: ${determineScreenDensityCode()}")
и выход будетSystem.out: density: xxxhdpi
источник
Я использую следующий код для доступа к DPI из модулей (нет необходимости иметь доступ к объекту контекста):
источник
В Android вы можете получить плотность экрана следующим образом:
А в Котлине так:
Обязательно регулярно проверяйте, добавляются ли новые плотности .
источник