Algunos tamaños comunes para organizar en Android
Método 1. getHeight ();
Dado que los getWidth y getHeight anteriores (incluido getOrientation) han sido @Deprecated después del nivel de API 13, screenWidth y height serán reemplazados por getSize, que es nuestro método 2 p>
Point outSize = nuevo Punto ();
display.getSize(outSize)()getSize(outSize);
screenWidth = outSize.x;
screenHeight = outSize.y;
Obviamente, resulta incómodo diferenciar entre niveles de API, por lo que existe una tercera forma general
DisplayMetrics dm = new DisplayMetrics(); p>getWindowManager().getDefaultDisplay().getMetrics(dm);
screenWidth = dm.widthPixels
screenHeight = dm.heightPixels
screenWidth; dm.widthPixels;
screenHeight = dm.heightPixels.heightPixels;
De hecho, las tres formas de código anteriores llaman al objeto de visualización predeterminado de WindowManager Las dimensiones de ancho y alto, y algunos lugares dicen que los tres formularios anteriores no pueden obtener valores específicos cuando no se muestra la pantalla. Cuando todos se obtienen como 0, llamé a la función onCreate en Actividad y descubrí que puede obtener valores específicos. no en la Actividad, puede obtener el siguiente código aplicando la función onCreate:
(((( WindowManager) getService)) WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getMetrics( dm );
También puede obtener valores específicos de ancho y alto de pantalla.
Obtener el tamaño de la barra de estado
Dado que decorView es la vista de nivel superior en la ventana, puede obtener decorView desde la ventana y luego decorView tiene un método getWindowVisibleDisplayFrame para obtener Área del programa de visualización, incluida la barra de título pero no la barra de estado. Esto incluye la barra de título, pero no la barra de estado.
Así que hay un primer formulario de código que puede calcular la altura de la barra de estado
Rect frame = new Rect();
getWindow().getDecorView () .getWindowVisibleDisplayFrame(frame);
int statusBarHeight = frame.top;
El código anterior a veces obtiene una altura de 0. Según Internet, está en la versión 4.0. 3 y posteriores devolverá 0. No lo he probado personalmente, pero obtuve 0 en mi máquina real. Hay un código para obtener la altura de la barra de estado en el programa fuente filtrado en línea:
statusBarHeight = getResources().getDimensionPixelSize (com.android.internal.R.dimen.status_bar_height);
Entonces, ¿cómo obtenerlo en código no fuente? Una solución popular en Internet es utilizar la reflexión para lograr la altura de la barra de estado anterior, que requiere código fuente. El código específico es el siguiente:
import java.lang.reflect.Field
<. p> //Obtener la altura de la barra de estado del teléfonopublic static int getStatusBarHeight(Context context){
Classlt;? c = null;
> Objeto obj = null
Campo campo = null
int x = 0, statusBarHeight = 38 //Normalmente este valor sería 38
intento; { p>
c = Class.forName("com.android.internal.R$dimen");
obj = c.newInstance()
campo; = c. getField("status_bar_height");
x = Integer.toString());
statusBarHeight = context.getResources().getDimensionPixelSize(x);
} catch (Excepción e1) {
e1.printStackTrace();
}
return statusBarHeight; /p>
}