Red de conocimiento informático - Aprendizaje de código fuente - Algunos tamaños comunes para organizar en Android

Algunos tamaños comunes para organizar en Android

En Android, hasta donde yo sé, actualmente existen tres formas diferentes de código que se pueden usar para obtener el tamaño de la pantalla

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

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éfono

public 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; {

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>

}