How to hide action bar before activity is created, and then show it again?

AndroidAndroid 3.0-HoneycombAndroid Actionbar

Android Problem Overview


I need to implement splash screen in my honeycomb app. I use this code in activity's onCreate to show splash:

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

and this code to show main UI after sometime:

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

But before onCreate is called and splash appears, there is small amount of time when action bar shown.

How can I make action bar invisible?

I tried to apply theme to activity without action bar:

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

but in that case getActionBar() always returns null and I found no way to show it again.

Android Solutions


Solution 1 - Android

Setting android:windowActionBar="false" truly disables the ActionBar but then, as you say, getActionBar(); returns null. This is solved by:

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

This creates the ActionBar and immediately hides it before it had the chance to be displayed.

But now there is another problem. After putting windowActionBar="false" in the theme, the Activity draws its normal Window Title instead of an ActionBar.
If we try to avoid this by using some of the *.NoTitleBar stock themes or we try to put <item name="android:windowNoTitle">true</item> in our own theme, it won't work.
The reason is that the ActionBar depends on the Window Title to display itself - that is the ActionBar is a transformed Window Title.
So the trick which can help us out is to add one more thing to our Activity theme xml:

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

This will make the Window Title with zero height, thus practically invisible .

In your case, after you are done with displaying the splash screen you can simply call

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

and you are done. The Activity will start with no ActionBar flickering, nor Window Title showing.

ADDON: If you show and hide the ActionBar multiple times maybe you have noticed that the first showing is not animated. From then on showing and hiding are animated. If you want to have animation on the first showing too you can use this:

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();
        }
    });

The same thing can be achieved with:

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

but it may need some extra logic to check if this is the first showing of the Activity.

The idea is to delay a little the hiding of the ActionBar. In a way we let the ActionBar be shown, but then hide it immediately. Thus we go beyond the first non-animated showing and next showing will be considered second, thus it will be animated.

As you may have guessed there is a chance that the ActionBar could be seen before it has been hidden by the delayed operation. This is actually the case. Most of the time nothing is seen but yet, once in a while, you can see the ActionBar flicker for a split second.

In any case this is not a pretty solution, so I welcome any suggestions.

Addition for v7 support actionbar user, the code will be:

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

Solution 2 - Android

Using this simple code in your .class file to hide action bar

getSupportActionBar().hide();

Solution 3 - Android

If you are using ActionBarSherlock, then use Theme.Sherlock.NoActionBar Theme in your Activity

<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>

Solution 4 - Android

Create two styles:

<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>

Set AppThemeNoBar as application theme and AppThemeBar to the activity where you want to show the ActionBar. Using two styles you wont see the Action bar while views are loading.

Check this link Android: hide action bar while view load

Solution 5 - Android

Hi I have a simple solution by using 2 themes

  1. Splash screen theme (add it to the manifest):

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

  2. normal theme (add it in your activity by setTheme(R.style.Theme)):

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

To support SDK 10:

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

Solution 6 - Android

I was also trying to hide Action Bar on Android 2.2, but none of these solution worked. Everything ends with a crash. I checked the DDMS LOg, It was telling me to use 'Theme.AppCompat'.At last I Solved the problem by changing the android:theme="@android:style/Theme.Holo.Light.NoActionBar"Line

into android:theme="@style/Theme.AppCompat.NoActionBar"and it worked, but the the Interface was dark.

then i tried android:theme="@style/Theme.AppCompat.Light.NoActionBar" and finally got what i wanted.

After that when I Searched about 'AppCompat' on Developer Site I got This.

So I think the Solution for Android 2.2 is

<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>

And Sorry for my bad English Like Always.

Solution 7 - Android

Best result to me was to create an activity with ThemeNoTitleBar and without content as launcher. Then this activity call directly to the other.

Of course if you want you can add content to the Splash Activity but in my case I just wanted to show application directly.

Manifest:

<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>

Activity:

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();
}

}

Solution 8 - Android

If you use one Activity included a splash screen, then you can do this if you use SherlockActionBar

getSupportActionBar().hide();

After the splash screen you can show it again with ...

getSupportActionBar().show();

It should be the same with native ActionBar of Android.

Solution 9 - Android

@Clerics solution works. But this appears to also be an issue with some of googles native apps: googles, play store, talk. Also other big apps like skype.

EDIT: Bellow solution have given me problem for actionbarsherlock on api < 4.0, the reason being setTheme doesn't work pre ice cream sandwich

Add following in your manifest within you application or activity tags:

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

And then in your main activity:

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

Solution 10 - Android

best and simple

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

Solution 11 - Android

2015, using support v7 library with AppCompat theme, set this theme for your Activity.

<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>

Solution 12 - Android

For Splashscreen you should use this line in manifest and don't use getActionBar()

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

and once when Splash Activity is finished in the main Activity use below or nothing

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

Solution 13 - Android

Try this, it works for me:

Below gets rid of activity's title bar

 requestWindowFeature(Window.FEATURE_NO_TITLE);

Below eliminates the notification bar to make the activity go full-screen

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

(Full Example Below) Take note: These methods were called before we set the content view of our activity

@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();
	}

Solution 14 - Android

this may be handy
add this to your manifest

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

cheers

Solution 15 - Android

The best way I find after reading all the available options is set main theme without ActionBar and then set up MyTheme in code in parent of all Activity.

Manifest:

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

BaseActivity:

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

This way helps me to avoid ActionBar when application start!

Solution 16 - Android

The solutions already posted came with the sideffect, that the first .show() call did not animate the ActionBar for me. I got another nice solution, which fixed that:

Create a transparent drawable - something like that:

> http://schemas.android.com/apk/res/android"> > android:color="#00000000" /> >

Set the actual actionbar background to a invisible custom view which you set on the actionbar:

> 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);

Set the transparent background for the actionbar in onCreate:

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

Imortant: Don't hide the actionbar immediately in onCreate, but with a little delay later - e.g. when the layout is finished with creation:

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

Before your first .show() call set the custom view visible:

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

Solution 17 - Android

In case you have null because you are using the support library, instead of getActionBar() you need to call getSupportActionBar().

Solution 18 - Android

Just add this to your MainActivity in the onCreate function.

val actionBar = supportActionBar?.apply { hide() }

Solution 19 - Android

Put your splash screen in a separate activity and use startActivityForResult from your main activity's onCreate method to display it. This works because, according to the docs:

>As a special case, if you call startActivityForResult() with a requestCode >= 0 during the initial onCreate(Bundle savedInstanceState)/onResume() of your activity, then your window will not be displayed until a result is returned back from the started activity. This is to avoid visible flickering when redirecting to another activity.

You should probably do this only if the argument to onCreate is null (indicating a fresh launch of your activity, as opposed to a restart due to a configuration change).

Solution 20 - Android

I had still error with null pointer and finally it helped when I called first getWindow().requestFeature() and then super.onCreate()

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

Solution 21 - Android

Actually, you could simply set splash Activity with NoActionBar and set your main activity with action bar.

Solution 22 - Android

Just add this in your styles.xml

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

Solution 23 - Android

The best way to do this is two make the first activity as blank activity and the content you want to put and then after some time fire another activity. By following this way you can make the first activity as your splash screen without action bar or anything. Heres my first activity

package com.superoriginal.rootashadnasim.syllabus;

import android.content.Intent;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class first_screen extends AppCompatActivity {



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_first_screen);


    final Handler h=new Handler();
    h.postDelayed(new Runnable() {
        @Override
        public void run() {
            Intent intent=new     Intent(getApplicationContext(),DrawerChooseBranchMainActivity.class);
            startActivity(intent);
        }
    },2000);

}
}

After that you can put any of your activity as first activity If you want no action bar in any screen then just add this in your styles

    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>

Solution 24 - Android

Android studio provide in build template for full screen, if you use Android studio you can follow below step to implement full screen activity.

First Step to Create new Activity

Select select Full screen Activity

Done. Android studio did your job, now you can check code for full screen.

Solution 25 - Android

this is the best way I used Go to java file, after onCreate:

@Override
    protected void onCreate(Bundle savedInstanceState) 
    { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_main); 
  
        // Take instance of Action Bar 
        // using getSupportActionBar and 
        // if it is not Null 
        // then call hide function 
        if (getSupportActionBar() != null) { 
            getSupportActionBar().hide(); 
        } 
    }

Solution 26 - Android

I realise that posting links are not the best way to do things, but I highly recommend you read the following documentation from Google themselves. This is the official android doc on how to control your system ui (things like actionbar, nav bar etc). Unfortunately the info is too much to post directly, but after reading this you will understand exactly how to show and hide features no matter what version you are developing for, its so simple!

Incase the link ever changes, it can be found under the official android documentation under training -> getting started -> Best practices for user interface -> managing the system ui

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

enter image description here

Solution 27 - Android

you can use this :

getSupportActionBar().hide(); if it doesn't work try this one :

getActionBar().hide();

if above doesn't work try like this :

in your directory = res/values/style.xml , open style.xml -> there is attribute parent change to parent="Theme.AppCompat.Light.DarkActionBar"

if all of it doesn't work too. i don't know anymore. but for me it works.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionIlya IzhovkinView Question on Stackoverflow
Solution 1 - AndroidClericView Answer on Stackoverflow
Solution 2 - AndroidgauravView Answer on Stackoverflow
Solution 3 - AndroidkaubatakView Answer on Stackoverflow
Solution 4 - AndroidLaranjeiroView Answer on Stackoverflow
Solution 5 - AndroidAbdullahView Answer on Stackoverflow
Solution 6 - AndroidS.AhsanView Answer on Stackoverflow
Solution 7 - AndroidjavakView Answer on Stackoverflow
Solution 8 - AndroidLuser_kView Answer on Stackoverflow
Solution 9 - AndroidWarpzitView Answer on Stackoverflow
Solution 10 - Androidarslan hakticView Answer on Stackoverflow
Solution 11 - AndroidSon Nguyen ThanhView Answer on Stackoverflow
Solution 12 - AndroidingsaurabhView Answer on Stackoverflow
Solution 13 - Androiduser3862873View Answer on Stackoverflow
Solution 14 - AndroidralphgabbView Answer on Stackoverflow
Solution 15 - AndroidDmRomantsovView Answer on Stackoverflow
Solution 16 - AndroidmAxView Answer on Stackoverflow
Solution 17 - AndroidNaskovView Answer on Stackoverflow
Solution 18 - AndroidMöritzRoView Answer on Stackoverflow
Solution 19 - AndroidTed HoppView Answer on Stackoverflow
Solution 20 - AndroidMatwoskView Answer on Stackoverflow
Solution 21 - AndroidChauyanView Answer on Stackoverflow
Solution 22 - AndroidJakub TrzcinkaView Answer on Stackoverflow
Solution 23 - AndroidashadView Answer on Stackoverflow
Solution 24 - AndroidHitesh DhamshaniyaView Answer on Stackoverflow
Solution 25 - AndroidDJEMAL MohamedView Answer on Stackoverflow
Solution 26 - AndroidChrisView Answer on Stackoverflow
Solution 27 - AndroidSenView Answer on Stackoverflow