2011-12-12 5 views
28

Solo me preguntaba cómo ocultar los botones de software de ICS/home/etc programáticamente. Al igual que las aplicaciones de Youtube cuando se reproduce un video. Quiero ocultarlos mientras se reproduce un video, pero criarlos si el usuario toca la pantalla.Ocultar botones de cambio de tarea de inicio de ICS

Parece que no puedo encontrarlo en ningún lugar de la web ni en la documentación de Google.

Respuesta

22

tratar de configurar una ventana de pantalla completa con SYSTEM_UI_FLAG_HIDE_NAVIGATION bandera

+0

Es esto necesario llamar a esto en vista raíz? – Talha

-1

Se llama "Lights Out Mode" cuando hablan de que en las aplicaciones. No pude encontrar nada relacionado con ICS pero aquí hay un enlace a una discusión de Honeycomb.

where is api call to do lights out mode in honeycomb

+0

Eso simplemente los convierte en los pequeños "puntos", en realidad no los oculta (como la mencionada aplicación de YouTube). –

29

pinxue está en el lugar que desee ... SYSTEM_UI_FLAG_HIDE_NAVIGATION. Ejemplo:

myView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); 

Una cosa a tener en cuenta, sin embargo, es que sobre cualquier (y significará cualquier I) la interacción del usuario será reshown la barra de navegación.

Con Honeycomb, lo más cerca que puede llegar es pasar al modo de "luces apagadas" (ahora llamado "perfil bajo" ... SYSTEM_UI_FLAG_LOW_PROFILE). Esto solo hace que los elementos en la barra de navegación sean menos visibles (los pequeños "puntos" que probablemente haya visto). Si usted quiere hacer lo mejor que puede a mantener la compatibilidad con Honeycomb se puede utilizar la reflexión para utilizar el método de "mejor":

// Ask the System Bar to hide 
int whichHiddenStatusToUse = android.view.View.STATUS_BAR_HIDDEN; 
try { 
    // if this next line doesn't thrown an exception then we are on ICS or 
    // above, so we can use the new field. 
    whichHiddenStatusToUse = View.class.getDeclaredField("SYSTEM_UI_FLAG_HIDE_NAVIGATION").getInt(mDrawingSurface); 
} catch (Exception ex) { 
} 
// now lets actually ask one of our views to request the decreased visibility 
myView.setSystemUiVisibility(whichHiddenStatusToUse); 
+7

La respuesta es genial. Sin embargo, trataría de evitar la reflexión siempre que sea posible. Porque es feo, como de costumbre. Simplemente verificaría la versión actual de la plataforma y usaría una de las constantes. P.ej. if (Build.VERSION.SDK_INT> = Build.VERSION_CODES.ICE_CREAM_SANDWICH) {...} –

+1

¿Dónde conseguir mDrawingSurface? – Nik

6

¿Quieres SYSTEM_UI_FLAG_HIDE_NAVIGATION.

Esta bandera se añadió como Ice Cream Sandwich, API 14. Anterior a 14 se agregó una bandera STATUS_BAR_HIDDEN en Honeycomb, API 11. Anteriormente, los botones de navegación no existían, por lo que los modos de pantalla completa se manejaban completamente por Themes (específicamente Theme.NoTitleBar.Fullscreen).

Uso:

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) 
    mBaseLayout.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); 
else if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) 
    mBaseLayout.setSystemUiVisibility(View.STATUS_BAR_HIDDEN); 
0

Esta respuesta no puede ser responder directamente a la pregunta. pero lo estoy publicando que puede ayudar a otros a ahorrar tiempo.

Necesitaba ocultar la barra Nav por completo. Incluso cuando el usuario hace clic en la pantalla, debe permanecer oculto.

Nada de lo anterior funcionó para mí.

Escribí una clase después de un par de días de buscar en Google este tema hace mucho tiempo. Termino en esta clase.

UtilsTaskBar.java

no pude probarlo en todas partes, pero funciona el 4 **

NOTA:. utilicé esta clase para aplicaciones de propósito especial, que no es para los usuarios típicos.

Si oculta la barra de navegación con esta clase, no se volverá a mostrar hasta que reinicie el dispositivo o lo muestre nuevamente con la misma clase.

Así que úsela solo si realmente la necesita.

+0

No funcionó en API 23 – yshahak

+0

@yshahak requiere permiso de root para ejecutar esas funciones, y no lo probé en api23 o superior, gracias por informarme. – MBH

+0

Bueno, no mencionaste nada sobre rooting ... Entonces es una historia diferente. – yshahak

0

en AndroidManifest.xml añadir lo siguiente:

<uses-permission android:name="android.permission.BROADCAST_STICKY"/> 

continuación, puede utilizar esta función para mostrar y ocultar la barra de navegación Inicio/retorno

private void changeSystemBarVisibilty(boolean show) 
{ 
    Context context = getApplicationContext(); 
    final Intent intent = new Intent("android.intent.action.SYSTEM_BAR_VISIBILITY"); 
    intent.putExtra("show", show); 
    context.sendStickyBroadcast(intent); 
} 
Cuestiones relacionadas