¿Cómo ocultar la barra de acción antes de que se cree la actividad, y luego mostrarla de nuevo?

Necesito implementar la pantalla de bienvenida en mi aplicación de nido de abeja. Yo uso este código en la actividad onCreate para mostrar splash:

setContentView(R.layout.splash); getActionBar().hide(); 

Y este código para mostrar la interfaz de usuario principal después de algún tiempo:

 setContentView(R.layout.main); getActionBar().show(); 

Pero antes de que onCreate se llame y aparece splash, hay una pequeña cantidad de tiempo cuando se muestra la barra de acción.

¿Cómo puedo hacer que no se muestre?

Traté de aplicar el tema a la actividad sin barra de acción:

 <item name="android:windowActionBar">false</item> 

Pero en ese caso getActionBar () devuelve siempre null y no encontré manera de mostrarlo de nuevo.

Configuración de android:windowActionBar="false" realmente desactiva el ActionBar pero luego, como usted dice, getActionBar(); Devuelve null. Esto se resuelve mediante:

 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().requestFeature(Window.FEATURE_ACTION_BAR); getActionBar().hide(); setContentView(R.layout.splash); // be sure you call this AFTER requestFeature 

Esto crea el ActionBar y lo oculta inmediatamente antes de que tuviera la oportunidad de ser mostrado.

Pero ahora hay otro problema. Después de poner windowActionBar="false" en el tema, la actividad dibuja su título de ventana normal en lugar de un ActionBar.
Si tratamos de evitar esto usando algunos de los temas comunes de *.NoTitleBar o tratamos de poner <item name="android:windowNoTitle">true</item> en nuestro propio tema, no funcionará.
La razón es que el ActionBar depende del título de la ventana para mostrarse a sí mismo – que es el ActionBar es un título de ventana transformado.
Así que el truco que puede ayudarnos es agregar una cosa más a nuestro tema de actividad xml:

 <item name="android:windowActionBar">false</item> <item name="android:windowTitleSize">0dp</item> 

Esto hará que el título de la ventana tenga una altura cero, prácticamente invisible.

En su caso, una vez que haya terminado de mostrar la pantalla de bienvenida, puede simplemente llamar

 setContentView(R.layout.main); getActionBar().show(); 

Y ya está hecho. La Actividad comenzará sin parpadeo de ActionBar, ni se mostrará el Título de la Ventana.

ADDON: Si muestra y ocultas varias veces el ActionBar, tal vez hayas notado que la primera presentación no está animada. A partir de entonces, se muestran y ocultan animaciones. Si desea que la animación en la primera presentación también se puede utilizar esto:

 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_ACTION_BAR); // delaying the hiding of the ActionBar Handler h = new Handler(); h.post(new Runnable() { @Override public void run() { getActionBar().hide(); } }); 

Lo mismo se puede lograr con:

 protected void onPostResume() { super.onPostResume(); getActionBar().hide(); 

Pero puede que necesite alguna lógica extra para comprobar si esta es la primera muestra de la Actividad.

La idea es retrasar un poco el esconder del ActionBar. De alguna manera dejamos mostrar la ActionBar, pero luego la escondes inmediatamente. Por lo tanto, vamos más allá de la primera muestra no animada y la siguiente muestra será considerada segunda, por lo que será animado.

Como habrás adivinado, existe la posibilidad de que la ActionBar se pueda ver antes de haber sido oculta por la operación retardada. Este es realmente el caso. La mayoría de las veces no se ve nada pero, de vez en cuando, se puede ver el parpadeo ActionBar por una fracción de segundo.

En cualquier caso, esto no es una solución bonita, así que acojo cualquier sugerencia.

Adición para el usuario de la barra de acción de soporte v7, el código será:

 getWindow().requestFeature(Window.FEATURE_ACTION_BAR); getSupportActionBar().hide(); 

Si está utilizando ActionBarSherlock, utilice el tema Theme.Sherlock.NoActionBar en su actividad

 <activity android:name=".SplashScreenActivity" android:theme="@style/Theme.Sherlock.NoActionBar"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> 

Utilizar este código simple en el archivo .class para ocultar la barra de acción

 getSupportActionBar().hide(); 

Crear dos estilos:

 <style name="AppThemeNoBar" parent="Theme.AppCompat.Light"> <item name="android:windowNoTitle">true</item> </style> <style name="AppThemeBar" parent="Theme.AppCompat.Light"> <item name="android:windowNoTitle">false</item> </style> 

Establezca AppThemeNoBar como tema de aplicación y AppThemeBar en la actividad en la que desea mostrar la ActionBar. Usando dos estilos, no verá la barra de acción mientras se están cargando las vistas.

Comprueba este enlace Android: oculta la barra de acción mientras ves la carga

Hola Tengo una solución simple usando 2 temas

  1. Tema de pantalla de inicio (agregue al manifiesto):

    <style name="SplashTheme" parent="@android:style/Theme.Holo.NoActionBar"> <item name="android:windowBackground">@color/red</item> </style>

  2. Tema normal (agregue en su actividad por setTheme (R.style.Theme)):

    <style name="Theme" parent="@style/Theme.Holo"> <item name="android:windowBackground">@color/blue</item> </style>

Para admitir SDK 10:

 @Override public void onCreate(Bundle savedInstanceState) { setTheme(R.style.Theme); super.onCreate(savedInstanceState); ........... ........... } 

También estaba tratando de ocultar la barra de acción en Android 2.2, pero ninguna de estas soluciones funcionó. Todo termina con un accidente. Comprobé el LOG de DDMS, me estaba diciendo que usar 'Theme.AppCompat'.At por último Resolví el problema cambiando el android:theme="@android:style/Theme.Holo.Light.NoActionBar" Line

En android:theme="@style/Theme.AppCompat.NoActionBar" y funcionó, pero la Interfaz era oscura.

Entonces android:theme="@style/Theme.AppCompat.Light.NoActionBar" intentado android:theme="@style/Theme.AppCompat.Light.NoActionBar" y finalmente conseguí lo que quería.

Después de eso, cuando he buscado 'AppCompat' en el sitio para desarrolladores, obtuve esto.

Así que creo que la solución para Android 2.2 es

 <activity android:name=".MainActivity" android:theme="@style/Theme.AppCompat.Light.NoActionBar" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> 

Y lo siento por mi mal inglés como siempre.

El mejor resultado para mí fue crear una actividad con ThemeNoTitleBar y sin contenido como lanzador. Entonces esta actividad llama directamente al otro.

Por supuesto si usted quiere usted puede agregar el contenido a la actividad del chapoteo pero en mi caso apenas deseé demostrar la aplicación directamente.

Manifiesto:

 <activity android:name="com.package.SplashActivity" android:theme="@android:style/Theme.Black.NoTitleBar" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> 

Actividad:

 public class SplashActivity extends Activity{ @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); //start StartActivity Intent intent = new Intent(this, StartActivity.class); startActivity(intent); finish(); } 

}

Si utiliza una Activity incluye una pantalla de bienvenida, puede hacerlo si utiliza SherlockActionBar

 getSupportActionBar().hide(); 

Después de la pantalla de bienvenida se puede mostrar de nuevo con …

 getSupportActionBar().show(); 

Debe ser el mismo con ActionBar nativo de Android.

La solución @Clerics funciona. Pero esto también parece ser un problema con algunas de las aplicaciones nativas googles: googles, play store, talk. También otras aplicaciones grandes como Skype.

EDIT : Bellow solución me han dado problema para actionbarsherlock en api <4.0, la razón de ser setTheme no funciona pre sándwich de helado

Agregue el siguiente en su manifiesto dentro de las etiquetas de la aplicación o de la actividad:

 android:theme="@style/Theme.NoActionBar" 

Y luego en su actividad principal:

  // Set theme setTheme(R.style.YOUR_THEME); getSupportActionBar().setTitle(R.string.title); // Start regular onCreate() super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); 

Mejor y simple

requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

2015, utilizando la biblioteca de soporte v7 con el tema AppCompat, establezca este tema para su actividad.

 <style name="AppTheme.AppStyled" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="colorPrimaryDark">@color/md_indigo_100</item> <item name="colorPrimary">@color/md_indigo_500</item> <item name="colorAccent">@color/md_red_500</item> <item name="android:textColorPrimary">@color/md_white_1000</item> <item name="android:textColor">@color/md_purple_500</item> <item name="android:textStyle">bold</item> <item name="windowNoTitle">true</item> <item name="windowActionBar">false</item> </style> 

Para Splashscreen debe utilizar esta línea en manifest y no utilizar getActionBar()

 <item name="android:windowActionBar">false</item> 

Y una vez que la Activity Splash haya finalizado en el uso principal de la Activity abajo o nada

 <item name="android:windowActionBar">true</item> 

Pruebe esto, funciona para mí:

A continuación se deshace de la barra de título de la actividad

  requestWindowFeature(Window.FEATURE_NO_TITLE); 

A continuación, elimina la barra de notificación para hacer que la actividad pase a pantalla completa

  getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 

(Ejemplo completo a continuación) Tome nota: Estos métodos se llamaron antes de establecer la vista de contenido de nuestra actividad

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Sets Application to full screen by removing action bar requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.activity_main); // without this check, we would create a new fragment at each orientation change! if (null == savedInstanceState) createFragment(); } 

Esto puede ser útil
Agregue esto a su manifiesto

  android:theme="@android:style/Theme.Light.NoTitleBar" 

aclamaciones

La mejor manera de encontrar después de leer todas las opciones disponibles es el tema principal sin ActionBar y luego configurar MyTheme en el código en el padre de toda la actividad.

Manifiesto:

 <application ... android:theme="@android:style/Theme.Holo.Light.NoActionBar" ...> 

BaseActivity:

 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setTheme(R.style.GreenHoloTheme); } 

¡Esta manera me ayuda a evitar ActionBar cuando comienzo de la aplicación!

Las soluciones ya publicadas vinieron con el sideffect, que la primera llamada .show () no animó el ActionBar para mí. Tengo otra buena solución, que fijó que:

Crear un dibujable transparente – algo así:

 <shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="#00000000" /> </shape> 

Establezca el fondo de la barra de acciones real en una vista personalizada invisible que establezca en la barra de acción:

 getSupportActionBar().setCustomView(R.layout.actionbar_custom_layout); getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM, ActionBar.DISPLAY_SHOW_CUSTOM | ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_SHOW_TITLE); 

Establezca el fondo transparente para la barra de acción en onCreate:

 getSupportActionBar().setBackgroundDrawable(getResources().getDrawable(R.drawable.background_transparent)); 

Imortant: no ocultar la barra de acción inmediatamente en onCreate, pero con un poco de retraso más tarde – por ejemplo, cuando el diseño se termina con la creación:

 getWindow().getDecorView().getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { getSupportActionBar().hide(); } }); 

Antes de que su primera llamada .show () establezca la vista personalizada visible:

 _actionbarRoot.setVisibility(View.VISIBLE); getSupportActionBar().show(); 

En caso de que tenga nulo porque está utilizando la biblioteca de soporte , en lugar de getActionBar() necesita llamar a getSupportActionBar() .

Ponga su pantalla de bienvenida en una actividad aparte y use startActivityForResult del startActivityForResult de su actividad principal para mostrarlo. Esto funciona porque, según los documentos:

Como un caso especial, si llama a startActivityForResult () con un requestCode> = 0 durante la onCreate inicial (Bundle savedInstanceState) / onResume () de su actividad, su ventana no se mostrará hasta que un resultado se devuelva de la actividad iniciada . Esto es para evitar parpadeos visibles al redirigir a otra actividad.

Probablemente debería hacer esto solo si el argumento de onCreate es null (lo que indica un nuevo lanzamiento de su actividad, a diferencia de un reinicio debido a un cambio de configuración).

Todavía tenía error con el puntero nulo y finalmente ayudó cuando llamé primero getWindow (). RequestFeature () y luego super.onCreate ()

 public void onCreate(Bundle savedInstanceState) { getWindow().requestFeature(Window.FEATURE_ACTION_BAR); super.onCreate(savedInstanceState); getActionBar().show(); 

Sólo tienes que añadir esto en tus estilos.xml

 <item name="android:windowNoTitle">true</item> 

En realidad, usted podría simplemente establecer la Activity splash con NoActionBar y establecer su activity principal con la barra de acción.

Me doy cuenta de que publicar enlaces no es la mejor manera de hacer las cosas, pero le recomiendo que lea la siguiente documentación de Google ellos mismos. Este es el documento android oficial sobre cómo controlar tu sistema ui (cosas como barra de acción, barra de navegación, etc). Desafortunadamente la información es demasiado para publicar directamente, pero después de leer esto usted entenderá exactamente cómo mostrar y ocultar características no importa qué versión está desarrollando, es tan simple!

Incase el vínculo siempre cambia, se puede encontrar en la documentación oficial android en formación -> empezar -> Mejores prácticas para la interfaz de usuario -> gestión del sistema ui

https://developer.android.com/training/system-ui/index.html

Introduzca aquí la descripción de la imagen

Usted puede utilizar esto:

getSupportActionBar().hide(); Si no funciona pruebe este:

 getActionBar().hide(); 

Si por encima no funciona intente de esta manera:

En su directorio = res / values ​​/ style.xml, open style.xml -> hay atributo parent change to parent="Theme.AppCompat.Light.DarkActionBar"

Si todo no funciona demasiado. Ya no lo sé. Pero para mí funciona.

  • ¿Cómo "instalar" Action Bar Sherlock?
  • Icono de barra de acciones ocultado después de que SearchView se expande
  • Back y Nav Up tienen resultados diferentes
  • Colocación de mi ActionBar en la parte inferior
  • Android - Fragmento de la biblioteca de soporte no compatible con la plataforma 4.3
  • ¿Cómo alinear los elementos en la barra de acción a la izquierda?
  • ViewPagerIndicator no muestra el texto del título
  • Ocultar barra de estado pero mostrar barra de acción
  • Cómo crear un PopupMenu personalizado en Android
  • Cómo mostrar / ocultar la Barra de Acción cuando se hace clic en
  • ActionBar (Soporte) con Fragmento (soporte)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.