Получить программный экран размера экрана?
Я хочу определить, имеет ли текущее устройство экран с малым, средним, большим или сильным в коде. Я не могу найти ничего в документах SDK, которые помогут мне получить эту информацию. Все методы/классы, на которые я смотрел, обеспечивают только абсолютные значения (например, размер экрана в пикселях, плотность экрана и т.д.).
Есть ли способ узнать, какой экран я запускаю в коде?
Ответы
Ответ 1
В итоге я использовал ресурсы bool
, размещенные в разных папках ведра. Мне нужно было различать обычные (маленькие/средние) и большие (большие/большие) экраны, поэтому я сделал это:
<сильные > значения /bools.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<bool name="screen_large">false</bool>
</resources>
<сильные > значения-большой/bools.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<bool name="screen_large">true</bool>
</resources>
Затем я просто позвоню getBoolean(R.bool.screen_large)
, чтобы узнать, большой экран или нет. Таким образом, он на 100% до платформы определяет, какой экран имеет устройство.
Ответ 2
Существует разница между плотностью и типом экрана.
![enter image description here]()
Поскольку вы можете получить пиксели и плотность, у вас всегда может быть статический класс Helper, который определяет это.
Вы можете преобразовать пиксели в dp с помощью
public static float dpFromPixels(int pixels) {
float dp = (float) ((pixels) / Density.scale);
return dp;
}
Я думаю, что вы можете захотеть добавить или вычесть .5f из пикселей, поскольку получение пикселей из dp происходит из этого кода.
public static int pixelsFromDp(float dps) {
int pixels = (int) (dps * Density.scale + 0.5f);
return pixels;
}
Из документация
xlarge экраны не менее 960dp x 720dp
большие экраны не менее 640dp x 480dp
нормальные экраны не менее 470dp x 320dp
маленькие экраны не менее 426dp x 320dp
Ответ 3
public static boolean isLargeScreen(Context context) {
int screenSize = context.getResources().getConfiguration().screenLayout
& Configuration.SCREENLAYOUT_SIZE_MASK;
return screenSize >= Configuration.SCREENLAYOUT_SIZE_LARGE;
}
Ответ 4
Я согласен, что ответ Феликса довольно изящный. Но я думаю, что способ, которым я нашел в этом посте, может быть еще проще Как определить размер экрана устройства (маленький, обычный, большой, xlarge) с помощью кода?
Ответ 5
Используйте класс DisplayMetrics
...
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
// DENSITY_LOW, DENSITY_MEDIUM, DENSITY_HIGH, or DENSITY_XHIGH
int density = dm.densityDpi;
Small = DisplayMetrics.DENSITY_LOW
Средний = DisplayMetrics.DENSITY_MEDIUM
Large = DisplayMetrics.DENSITY_HIGH
XLarge = DisplayMetrics.DENSITY_XHIGH
Ответ 6
Я использую этот метод в своем коде для различия между "Большими экранами" ( "Что я рассматриваю планшеты" ) и "Маленькие экраны" (Что я считаю телефонами).
public static boolean isLargeScreen(Configuration toCheckConfig) {
int screenSizeBucket = toCheckConfig.screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK;
if (screenSizeBucket >= Configuration.SCREENLAYOUT_SIZE_LARGE) {
return true;
}
else return false;
}
Объект Configuration
также содержит SCREENLAYOUT_SIZE_SMALL
, SCREENLAYOUT_SIZE_XLARGE
и т.д. (если вам нужно проверить ведра размера).
Это также хорошо работает с этими двумя функциями утилиты:
public static int getPixelsFromDp(Context context, int dpValue) {
return (int) (context.getResources().getDisplayMetrics().density * dpValue);
}
public static int getDpfromPixels(Context context, int pixels) {
return (int) (pixels / context.getResources().getDisplayMetrics().density);
}
Где context.getResources().getDisplayMetrics().density
равно 1.0
, 1.5
, 2.0
(mdpi
, hdpi
, xhdpi
соответственно).
Ответ 7
Как дополнение к ответу Felix, вы можете использовать следующий код, чтобы получить ScreenSize без создания какой-либо папки для значений-XXX:
int screenSize = getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK;
Log.d(TAG, "screenSize = "+screenSize);
switch(screenSize) {
case Configuration.SCREENLAYOUT_SIZE_LARGE:
Log.d(TAG, "Large Screen");
break;
case Configuration.SCREENLAYOUT_SIZE_NORMAL:
Log.d(TAG, "Normal Screen");
break;
case Configuration.SCREENLAYOUT_SIZE_SMALL:
Log.d(TAG, "Small Screen");
break;
case Configuration.SCREENLAYOUT_SIZE_XLARGE :
Log.d(TAG, "XLarge Screen");
break;
default:
Log.d(TAG, "Screen size is neither large, normal or small or xlarge");
}
Ответ 8
DisplayMetrics
получил все, что вам нужно. Чтобы получить его
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);