¿Hay alguna manera de determinar la dimensión (ancho) de la barra de menú de los dispositivos sin botones de menú fijo? (como los dispositivos archos).Dimensión de los botones programables barra
Necesito saber la dimensión útil de la pantalla ...
¿Hay alguna manera de determinar la dimensión (ancho) de la barra de menú de los dispositivos sin botones de menú fijo? (como los dispositivos archos).Dimensión de los botones programables barra
Necesito saber la dimensión útil de la pantalla ...
A partir de Andorid 3.2, la altura de la barra de estado del sistema no está incluido en la altura de DisplayMetrics, usted tiene que utilizar las API de indocumentados (Display.getRawWidth() y Display.getRawHeight()) para obtener el ancho o alto de la pantalla física.
Method mGetRawW = Display.class.getMethod("getRawWidth");
Method mGetRawH = Display.class.getMethod("getRawHeight");
int nW = (Integer)mGetRawW.invoke(dp);
int nH = (Integer)mGetRawH.invoke(dp);
ACTUALIZACIÓN: Para API 13-16, usted tiene que utilizar el código de arriba para obtener verdadera anchura/altura. Para API 17+, ahora puede usar la nueva API pública, Display.getRealSize()
Este método es muy útil para establecer el relleno de diseño en Android KitKat (4.4). Con esto, puede evitar que la barra de botones suaves se superponga sobre su diseño.
El método getRealMetrics
sólo está disponible con API y + 17, pero yo sólo estoy usando el siguiente método que escribí para dispositivos de API 19+
@SuppressLint("NewApi")
private int getSoftbuttonsbarHeight() {
// getRealMetrics is only available with API 17 and +
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int usableHeight = metrics.heightPixels;
getWindowManager().getDefaultDisplay().getRealMetrics(metrics);
int realHeight = metrics.heightPixels;
if (realHeight > usableHeight)
return realHeight - usableHeight;
else
return 0;
}
return 0;
}
comprobarse a la Nexus 5 & Nexus 7 2013.
Parece que se han devuelto resultados incorrectos para el modo de pantalla de paisaje – Sergii
No he tenido ningún problema con el modo horizontal. ¿Se vuelve a llamar a su método sobre cambio de rotación? – chteuchteu
no, quise decir que en algunos casos necesita verificar la diferencia en el ancho pero no en la altura. ¿Cuando las teclas suaves están a la derecha de la pantalla rotada en modo paisaje? – Sergii
Una respuesta muy tardía, pero para cualquiera que encuentre este problema. Una forma simple de obtener la cantidad de espacio utilizable que compensa cualquier tecla suave/barra de navegación o incluso la barra de estado, es usar getWindowVisibleDisplayFrame (Rect) desde Apps DecorView. Esto cargará un objeto Rect con la dimensión de la pantalla que realmente se puede usar.
Como no puede obtener directamente una referencia al DecorView de Activiy, primero debe obtener la ventana de la Actividad utilizando el método de acceso, getWindow(). Esto devolverá el objeto ventana que contiene la Actividad y otros elementos de la pantalla. Para obtener la decorView que contiene la actividad, así como las decoraciones de la pantalla, es decir, la barra de estado, barra de navegación/barra de botones programables, llame al método de acceso o getDecorView(). Una vez que tenga una referencia a la llamada DecorView getWindowVisibleDisplayFrame (Rect) y tendrá un objeto Rect cargado.
Cuál es dp en (Entero) mGetRawW.invoke (dp); Y devolverá la altura con el menú Soft incluido. – Herry
Me da una excepción NoSuchMethodException. – DevAndroid
¿Qué es dp? Tampoco pude encontrar ambos métodos (NoSuchMethod Exception) – Alqueraf