android - programacion - ¿Cómo obtener la altura y el ancho real de la pantalla?
manual de android en pdf (3)
Creo que esto funcionará El truco es que debes usar:
display.getRealSize(size);
no
display.getSize(size);
Para lidiar con su problema de codificación API 8, haga algo como esto:
try {
display.getRealSize(size);
height = size.y;
} catch (NoSuchMethodError e) {
height = display.getHeight();
}
Solo los dispositivos API más recientes tendrán botones de navegación en pantalla y, por lo tanto, necesitan el nuevo método, los dispositivos más antiguos emitirán una excepción pero no tendrán navegación en pantalla, por lo que el método anterior está bien.
En caso de que sea necesario decirlo: el hecho de que tenga un nivel mínimo de API de 8 para su proyecto no significa que deba compilarlo en ese nivel. También uso el nivel 8 como mínimo, pero mi proyecto se compila principalmente en el nivel 13 (3.2), lo que les da acceso a muchos métodos nuevos.
DisplayMetrics metrics = new DisplayMetrics();
this.getWindowManager().getDefaultDisplay().getMetrics(metrics);
screenWidth = metrics.widthPixels;
screenHeight = metrics.heightPixels;
Uso estos códigos para obtener el alto y el ancho de la pantalla
la altura de la pantalla en mi Nexus7 debe ser de 1280
pero devuelve 1205 ...
y mi minSdkVersion es nivel 8
así que no puedo usar estos métodos:
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int screen_width = size.x;
int screen_height = size.y;
ahora, ¿cómo debería obtener el tamaño de pantalla correcto?
Editar:
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;
}
usarlo funciona!
He escrito un método que se acercará lo más posible a las API 10 a 17+. Debe dar el ancho y alto real para API 14+, y lo hace tan bien como para todo lo demás.
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''s 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();
}
Puede encontrar las dimensiones reales del dispositivo con Display
o DisplayMetrics
Usando la pantalla:
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);
}
Usando 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);
}