FLAG_TRANSLUCENT_NAVIGATION no está disponible en modo horizontal?

Este problema es similar a Compruebe si la navegación translúcida está disponible, pero no completamente. Tengo un Nexus 4 con CyanogenMod 11 o Android 4.4 equivalente y cualquier aplicación que se ejecuta en modo horizontal con FLAG_TRANSLUCENT_NAVIGATION no cuenta con la translucidez en la interfaz de usuario del sistema como en el modo vertical.

El mismo problema se puede reproducir en Nexus 5, ya que no he visto ninguna aplicación de Google construido para Android 4.4 en modo horizontal con botones translúcidos.

Este es el código que estoy usando

int API_LEVEL = android.os.Build.VERSION.SDK_INT; if (API_LEVEL >= 19) { getWindow().addFlags( WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION ); } 

Y mientras que la superficie de la ventana se hace más grande (e inutilizable) no hay translucidez.

Así que la pregunta es, ¿tengo que hacer algo más para que funcione en modo horizontal? O es un error de Android?

No sé si tienen la intención de cambiar el comportamiento, pero parece deliberado. Desde que FLAG_TRANSLUCENT_NAVIGATION fue introducido en Android Kitkat, los dispositivos de "teléfono" siempre han tenido una barra de navegación negra opaca en el lado derecho de la pantalla en el paisaje. Incluso en el momento de este post, hay una nueva bandera en Android Lollipop ( FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS ) que tiene el mismo comportamiento, no importa lo que se pasó a setStatusBarColor() ) .

He aquí un código aproximado que podrías usar para saber cuándo el estilo de la barra de navegación está fuera de tu control.

 class MyActivity extends Activity { // ... boolean isNavigationForcedBlack() { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { return true; } final int windowFlags = getWindow().getAttributes().flags; int navControlFlags = WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { navControlFlags |= WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS; } if ((windowFlags & navControlFlags) == 0) { return true; } boolean deviceHasOpaqueSideLandscapeNav = getDeviceSmallestWidthDp() < 600; boolean isLandscape = getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE; return deviceHasOpaqueSideLandscapeNav && isLandscape; } DisplayMetrics dm = new DisplayMetrics(); float getDeviceSmallestWidthDp() { getWindowManager().getDefaultDisplay().getRealMetrics(dm); float widthDp = dm.widthPixels / dm.density; float heightDp = dm.heightPixels / dm.density; return Math.min(widthDp, heightDp); } } 

Puede ver si el efecto translúcido está disponible en el dispositivo actual utilizando el código siguiente:

 int id = getResources().getIdentifier("config_enableTranslucentDecor", "bool", "android"); if (id != 0 && getResources().getBoolean(id)) { // Translucent available Window w = getWindow(); w.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION, WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); w.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); } 

Con este código, puede comprobar si el dispositivo puede utilizar los FLAG_TRANSLUCENT_NAVIGATION y FLAG_TRANSLUCENT_STATUS . Entonces, tienes que decir que quieres que Actionbar, la barra de notificaciones y la barra de botones suaves se superpongan a tu diseño (que se llamará antes de setContentView(R.layout.yourlayout); en onCreate() ):

 getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY); 

No se olvide de añadir un poco de relleno a su contenido para evitar que sea inalcanzable, ya que sería "ocultos" por esos elementos. Para lograr esto, puede agregar el android:fitsSystemWindows="true" en su contenedor principal en su diseño.

  • Cuadro de diálogo de alerta personalizada que parece extraño en Android 4.x
  • Cajón de navegación debajo de la Barra de Acción
  • Bluetooth HCI snoop registro no generado
  • ¿Cuál es el propósito de " Accented English" (zz-ZZ) en Android?
  • Creación de una aplicación para Android con targetSdkVersion de 25 y minSdkVersion 19
  • Imprima varias páginas PDF utilizando el marco de impresión de Android 4.4
  • Android PdfDocument dañado cuando se guarda en un almacenamiento externo
  • Cómo hacer transparente la barra de navegación
  • Cómo enviar un SMS en Android Kitkat desde la aplicación no predeterminada sin escribir a SMS Provider
  • Almacenamiento de datos en / externalsdcard / Android / datos / <app package name> en KITKAT
  • ¿Android KitKat permite que los dispositivos compatibles con Bluetooth LE actúen como un dispositivo periférico?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.