Как получить реальную высоту и ширину экрана?
DisplayMetrics metrics = new DisplayMetrics();
this.getWindowManager().getDefaultDisplay().getMetrics(metrics);
screenWidth = metrics.widthPixels;
screenHeight = metrics.heightPixels;
Я использую эти коды для получения высоты и ширины экрана
высота экрана на моем Nexus7 должна быть 1280
но он возвращает 1205...
а моя minSdkVersion - уровень 8
поэтому я не могу использовать этот метод:
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int screen_width = size.x;
int screen_height = size.y;
теперь, как мне получить правильный размер экрана?
Edit:
if (Build.VERSION.SDK_INT >= 11) {
Point size = new Point();
try {
this.getWindowManager().getDefaultDisplay().getRealSize(size);
screenWidth = size.x;
screenHeight = size.y;
} catch (NoSuchMethodError e) {
Log.i("error", "it can't work");
}
} else {
DisplayMetrics metrics = new DisplayMetrics();
this.getWindowManager().getDefaultDisplay().getMetrics(metrics);
screenWidth = metrics.widthPixels;
screenHeight = metrics.heightPixels;
}
используйте его!
Ответы
Ответ 1
Я думаю, это сработает. Фокус в том, что вы должны использовать:
display.getRealSize(size);
не
display.getSize(size);
Чтобы справиться с проблемой кодирования API 8, выполните следующие действия:
try {
display.getRealSize(size);
height = size.y;
} catch (NoSuchMethodError e) {
height = display.getHeight();
}
Только новые API-устройства будут иметь экранные кнопки навигации и, следовательно, нуждаются в новом методе, более старые устройства будут генерировать исключение, но не будут иметь экранную навигацию, поэтому старый метод будет прекрасен.
В случае, если это нужно сказать: просто потому, что у вас минимальный уровень API 8 для вашего проекта не означает, что вы должны скомпилировать его на этом уровне. Я также использую уровень 8 для минимума, но мой проект в основном скомпилирован на уровне 13 (3.2), предоставляя им доступ к множеству новых методов.
Ответ 2
Я написал метод, который будет как можно ближе к API с 10 по 17+. Он должен давать реальную ширину и высоту для API 14+, и он делает то же самое, что и для всего остального.
Display display = context.getWindowManager().getDefaultDisplay();
int realWidth;
int realHeight;
if (Build.VERSION.SDK_INT >= 17){
//new pleasant way to get real metrics
DisplayMetrics realMetrics = new DisplayMetrics();
display.getRealMetrics(realMetrics);
realWidth = realMetrics.widthPixels;
realHeight = realMetrics.heightPixels;
} else if (Build.VERSION.SDK_INT >= 14) {
//reflection for this weird in-between time
try {
Method mGetRawH = Display.class.getMethod("getRawHeight");
Method mGetRawW = Display.class.getMethod("getRawWidth");
realWidth = (Integer) mGetRawW.invoke(display);
realHeight = (Integer) mGetRawH.invoke(display);
} catch (Exception e) {
//this may not be 100% accurate, but it all we've got
realWidth = display.getWidth();
realHeight = display.getHeight();
Log.e("Display Info", "Couldn't use reflection to get the real display metrics.");
}
} else {
//This should be close, as lower API devices should not have window navigation bars
realWidth = display.getWidth();
realHeight = display.getHeight();
}
Ответ 3
Вы можете найти реальные размеры устройства с помощью Display
или DisplayMetrics
Использование Дисплея:
private void findRealSize(Activity activity)
{
Point size = new Point();
Display display = activity.getWindowManager().getDefaultDisplay();
if (Build.VERSION.SDK_INT >= 17)
display.getRealSize(size);
else
display.getSize(size);
int realWidth = size.x;
int realHeight = size.y;
Log.i("LOG_TAG", "realWidth: " + realWidth + " realHeight: " + realHeight);
}
Использование DisplayMetrics:
private void findRealSize(Activity activity)
{
DisplayMetrics displayMetrics = new DisplayMetrics();
if (Build.VERSION.SDK_INT >= 17)
{
activity.getWindowManager().getDefaultDisplay().getRealMetrics(displayMetrics);
}
else
{
activity.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
}
int realWidth = displayMetrics.widthPixels;
int realHeight = displayMetrics.heightPixels;
Log.i("LOG_TAG", "realWidth: " + realWidth + " realHeight: " + realHeight);
}