получить плотность экрана программно в Android?

Здесь вы можете найти другую библиотеку: http://www.garret.ru/cppreflection/docs/reflect.html Он поддерживает два способа: получение информации о типе из отладочной информации и предоставление возможности программисту предоставить эта информация.

Я также заинтересовался отражением для моего проекта и нашел эту библиотеку, я еще не пробовал ее, но пробовал другие инструменты от этого парня, и мне нравится, как они работают: -)

495
задан Ωmega 21 February 2018 в 22:35
поделиться

5 ответов

Вы можете получить информацию о дисплее из DisplayMetrics struct:

DisplayMetrics metrics = getResources().getDisplayMetrics();

Хотя Android не использует прямое отображение пикселей, он использует горсть квантованных значений Density Independent Pixel, а затем масштабируется до фактического размера экрана. Поэтому metrics. densityDpi будет одной из констант DENSITY_xxx (120, 160, 213, 240, 320, 480 или 640 dpi).

Если вам нужна фактическая плотность пикселей ЖК-дисплея (возможно, для приложения OpenGL), вы можете получить ее из свойств metrics.xdpi и metrics.ydpi для горизонтальной и вертикальной плотности соответственно.

Если вы используете API Levels ранее 4. Свойство metrics.density представляет собой масштабный коэффициент с плавающей запятой от эталонной плотности (160dpi). То же значение, предоставляемое metrics.densityDpi, можно вычислить

int densityDpi = (int)(metrics.density * 160f);
518
ответ дан 22 November 2019 в 22:35
поделиться

Я использую следующий код для доступа к DPI от модулей (никакая потребность в том, чтобы иметь доступ к объекту контекста):

(Resources.getSystem().getDisplayMetrics().xdpi
Resources.getSystem().getDisplayMetrics().ydpi)/2
0
ответ дан 22 November 2019 в 22:35
поделиться

Другой способ загрузить плотность устройством:

папки Create values для каждой плотности

  • значения (значение по умолчанию mdpi)
  • значения-hdpi
  • значения-xhdpi
  • значения-xxhdpi
  • значения-xxxhdpi

Добавляют строковый ресурс в своем соответствующем strings.xml:

<string name="screen_density">MDPI</string>    <!-- ..\res\values\strings.xml -->
<string name="screen_density">HDPI</string>    <!-- ..\res\values-hdpi\strings.xml -->
<string name="screen_density">XHDPI</string>   <!-- ..\res\values-xhdpi\strings.xml -->
<string name="screen_density">XXHDPI</string>  <!-- ..\res\values-xxhdpi\strings.xml -->
<string name="screen_density">XXXHDPI</string> <!-- ..\res\values-xxxhdpi\strings.xml -->

затем просто получают строковый ресурс, и у Вас есть своя плотность:

String screenDensity = getResources().getString(R.string.screen_density);

, Если плотность больше, чем XXXHDPI, она примет значение по умолчанию к XXXHDPI или если это будет ниже, чем HDPI, то она примет значение по умолчанию к MDPI

R.strings.screen_density values

, я не учел LDPI, потому что для моего варианта использования это не необходимо.

1
ответ дан 22 November 2019 в 22:35
поделиться

Это должно сработать.

DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
int width = dm.widthPixels; //320
int height = dm.heightPixels; //480
7
ответ дан 22 November 2019 в 22:35
поделиться

Чтобы получить dpi:

DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);

// will either be DENSITY_LOW, DENSITY_MEDIUM or DENSITY_HIGH
int dpiClassification = dm.densityDpi;

// these will return the actual dpi horizontally and vertically
float xDpi = dm.xdpi;
float yDpi = dm.ydpi;
36
ответ дан 22 November 2019 в 22:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: