programacion - manual de android en pdf
¿Cómo ocultar la barra de navegación permanentemente en la actividad de Android? (8)
Quiero ocultar la barra de navegación permanentemente en mi actividad (no toda la interfaz del sistema). ahora estoy usando esta pieza de código
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
Oculta la barra, pero cuando el usuario toca la pantalla se muestra de nuevo. ¿Hay alguna forma de ocultarlo permanentemente hasta la actividad onStop()
?
Creo que el código de golpe te ayudará y agrega esos códigos antes de setContentView ()
getWindow().setFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS, WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
Agregue los códigos detrás de setContentView () getWindow (). GetDecorView (). SetSystemUiVisibility (View.SYSTEM_UI_FLAG_LOW_PROFILE);
De acuerdo con el sitio del desarrollador de Android
Creo que no puedes (hasta donde sé) ocultar la barra de navegación de forma permanente ...
Sin embargo, puedes hacer un truco. Es un truco.
Justo cuando aparece la navigation bar
cuando el usuario toca la pantalla. Inmediatamente ocultarlo de nuevo. Es divertido.
Mira esto
void setNavVisibility(boolean visible) {
int newVis = SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| SYSTEM_UI_FLAG_LAYOUT_STABLE;
if (!visible) {
newVis |= SYSTEM_UI_FLAG_LOW_PROFILE | SYSTEM_UI_FLAG_FULLSCREEN
| SYSTEM_UI_FLAG_HIDE_NAVIGATION;
}
// If we are now visible, schedule a timer for us to go invisible.
if (visible) {
Handler h = getHandler();
if (h != null) {
h.removeCallbacks(mNavHider);
if (!mMenusOpen && !mPaused) {
// If the menus are open or play is paused, we will not auto-hide.
h.postDelayed(mNavHider, 1500);
}
}
}
// Set the new desired visibility.
setSystemUiVisibility(newVis);
mTitleView.setVisibility(visible ? VISIBLE : INVISIBLE);
mPlayButton.setVisibility(visible ? VISIBLE : INVISIBLE);
mSeekView.setVisibility(visible ? VISIBLE : INVISIBLE);
}
Consulte esto para obtener más información sobre esto ...
Ocultar barra de sistema en tabletas
Es mi solución:
Primero, defina booleano que indique si la barra de navegación es visible o no.
boolean navigationBarVisibility = true //because it''s visible when activity is created
Segundo método de creación que oculta la barra de navegación.
private void setNavigationBarVisibility(boolean visibility){
if(visibility){
View decorView = getWindow().getDecorView();
int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);
navigationBarVisibility = false;
}
else
navigationBarVisibility = true;
}
De forma predeterminada, si hace clic en actividad después de ocultar la barra de navegación, la barra de navegación estará visible. Así que tenemos su estado si es visible lo ocultaremos.
Ahora configure OnClickListener a su vista. Utilizo una vista de superficie así que para mí:
playerSurface.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setNavigationBarVisibility(navigationBarVisibility);
}
});
Además, debemos llamar a este método cuando se inicia la actividad. Porque queremos ocultarlo al principio.
setNavigationBarVisibility(navigationBarVisibility);
Es un problema de seguridad: https://.com/a/12605313/1303691
por lo tanto, no es posible ocultar la navegación en una tableta de forma permanente con una única llamada al comienzo de la creación de la vista. Estará oculto, pero aparecerá cuando toque la pantalla. Por lo tanto, solo con un segundo toque en la pantalla puede provocar onClickEvent en su diseño. Por lo tanto, debe interceptar esta llamada, pero todavía no lo he logrado, actualizaré mi respuesta cuando la encuentre. ¿O ya tienes la respuesta?
Hacer esto.
public void FullScreencall() {
if(Build.VERSION.SDK_INT > 11 && Build.VERSION.SDK_INT < 19) { // lower api
View v = this.getWindow().getDecorView();
v.setSystemUiVisibility(View.GONE);
} else if(Build.VERSION.SDK_INT >= 19) {
//for new api versions.
View decorView = getWindow().getDecorView();
int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
decorView.setSystemUiVisibility(uiOptions);
}
}
Esto funciona al 100% y puede hacer lo mismo con versiones de API más bajas, incluso si es una respuesta tardía, espero que ayude a otra persona.
Si desea que esto sea permanente, simplemente llame a FullscreenCall()
dentro de su método onResume()
.
Prueba esto.
View decorView = getWindow().getDecorView();
int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);
avísame si eso ayuda ... :)
Utilizar:-
view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
En Tablets con Android 4+, no es posible ocultar la barra de sistema / navegación.
De la documentation :
SYSTEM_UI_FLAG_HIDE_NAVIGATION es un nuevo indicador que solicita que la barra de navegación se oculte por completo. Tenga en cuenta que esto funciona solo para la barra de navegación utilizada por algunos teléfonos (no oculta la barra del sistema en las tabletas).
Fragmentos:
HideNavigationBarComponent.java
Esto es para Android 4.4+
Pruebe el modo inmersivo https://developer.android.com/training/system-ui/immersive.html
Fragmento rápido (para una clase de actividad ):
private int currentApiVersion;
@Override
@SuppressLint("NewApi")
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
currentApiVersion = android.os.Build.VERSION.SDK_INT;
final int flags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
// This work only for android 4.4+
if(currentApiVersion >= Build.VERSION_CODES.KITKAT)
{
getWindow().getDecorView().setSystemUiVisibility(flags);
// Code below is to handle presses of Volume up or Volume down.
// Without this, after pressing volume buttons, the navigation bar will
// show up and won''t hide
final View decorView = getWindow().getDecorView();
decorView
.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener()
{
@Override
public void onSystemUiVisibilityChange(int visibility)
{
if((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0)
{
decorView.setSystemUiVisibility(flags);
}
}
});
}
}
@SuppressLint("NewApi")
@Override
public void onWindowFocusChanged(boolean hasFocus)
{
super.onWindowFocusChanged(hasFocus);
if(currentApiVersion >= Build.VERSION_CODES.KITKAT && hasFocus)
{
getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
}
}
Si tiene problemas, presione Subir volumen o Bajar volumen que muestra la barra de navegación. onCreate
código en onCreate
see FullScreenFragment.java
Aquí hay otra pregunta relacionada: