Dimensión de la barra de botones

¿Existe una manera de determinar la dimensión (ancho) de la barra de menús de los dispositivos sin botones de menú duro? (Como los dispositivos de archos).

Necesito saber la dimensión útil de la pantalla …

Este método es muy útil para establecer el relleno de diseño en Android KitKat (4.4). Usando 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 17 y +, pero sólo estoy usando el siguiente método que escribí para dispositivos en 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; } 

Probado con Nexus 5 y Nexus 7 2013.

Una respuesta muy tarde, pero para cualquiera que encuentre este problema. Una forma sencilla de obtener la cantidad de espacio utilizable que compensa las teclas de función / barra de navegación o incluso la barra de estado, es usar getWindowVisibleDisplayFrame (Rect) de Apps DecorView. Esto cargará un objeto Rect con la dimensión de la pantalla que es realmente utilizable.

Dado que no se puede obtener directamente una referencia a DecorView de Activiy, primero debe obtener la ventana de la Actividad usando el método accessor, getWindow (). Esto devolverá el objeto de ventana que contiene la actividad y otros elementos de pantalla. Para obtener el 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, método getDecorView (). Una vez que tenga una referencia a la llamada DecorView getWindowVisibleDisplayFrame (Rect) y tendrá un objeto Rect cargado.

Iniciando Andorid 3.2, la altura de la barra de estado del sistema no está incluida en la altura de DisplayMetrics, tiene que usar APIs indocumentadas (Display.getRawWidth () y Display.getRawHeight ()) para obtener el ancho o la altura 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); 

ACTUALIZADO: Para API 13-16, tiene que usar el código anterior para obtener la anchura / altura real. Para API 17+, ahora puede usar la nueva API pública, Display.getRealSize()

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.