Здесь вы можете найти другую библиотеку: http://www.garret.ru/cppreflection/docs/reflect.html Он поддерживает два способа: получение информации о типе из отладочной информации и предоставление возможности программисту предоставить эта информация.
Я также заинтересовался отражением для моего проекта и нашел эту библиотеку, я еще не пробовал ее, но пробовал другие инструменты от этого парня, и мне нравится, как они работают: -)
Вы можете получить информацию о дисплее из 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);
Я использую следующий код для доступа к DPI от модулей (никакая потребность в том, чтобы иметь доступ к объекту контекста):
(Resources.getSystem().getDisplayMetrics().xdpi
Resources.getSystem().getDisplayMetrics().ydpi)/2
Другой способ загрузить плотность устройством:
папки Create values
для каждой плотности
Добавляют строковый ресурс в своем соответствующем 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
, я не учел LDPI
, потому что для моего варианта использования это не необходимо.
Это должно сработать.
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
int width = dm.widthPixels; //320
int height = dm.heightPixels; //480
Чтобы получить 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;