Как скрыть панель действий до создания активности, а затем снова показать ее?

Мне нужно реализовать заставку в моем сотовом приложении. Я использую этот код в onSreate активности, чтобы показать всплеск:

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

И этот код, чтобы показать основной интерфейс через некоторое время:

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

Но до того, как вызывается onCreate и появляется всплеск, на панели действий отображается небольшое количество времени.

Как я могу заставить его не показывать?

Я попытался применить тему к действию без панели действий:

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

Но в этом случае getActionBar () всегда возвращает null, и я не нашел способа показать его снова.

Solutions Collecting From Web of "Как скрыть панель действий до создания активности, а затем снова показать ее?"

Установка android:windowActionBar="false" действительно отключает ActionBar, но затем, как вы говорите, getActionBar(); Возвращает null. Это достигается путем:

 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 

Это создает ActionBar и сразу же скрывает его, прежде чем у него будет возможность отобразиться.

Но теперь есть еще одна проблема. После установки windowActionBar="false" в теме, Activity рисует свое обычное заголовок окна вместо ActionBar.
Если мы попытаемся избежать этого, используя некоторые темы темы *.NoTitleBar или мы попытаемся поместить <item name="android:windowNoTitle">true</item> в нашу собственную тему, это не сработает.
Причина в том, что ActionBar зависит от названия окна для отображения самого себя – это ActionBar – это преобразованное заголовок окна.
Таким образом, трюк, который может помочь нам, – добавить еще одну вещь в нашу тему активности xml:

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

Это сделает заголовок окна с нулевой высотой, таким образом, практически невидимым.

В вашем случае, после того, как вы закончите отображение всплывающего экрана, вы можете просто позвонить

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

И все готово. Активность начнется без мерцания ActionBar или показ заголовка окна.

ADDON: Если вы показываете и скрываете ActionBar несколько раз, возможно, вы заметили, что первый показ не анимирован. С тех пор показ и скрытие оживляют. Если вы хотите иметь анимацию при первом показе, вы можете использовать это:

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

То же самое можно достичь:

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

Но может потребоваться дополнительная логика, чтобы проверить, является ли это первым показанием Activity.

Идея состоит в том, чтобы немного задержать скрытие ActionBar. В некотором роде мы позволяем ActionBar отображаться, но затем немедленно спрячем его. Таким образом, мы выходим за пределы первого неанимированного показа, и следующий показ будет считаться вторым, поэтому он будет анимирован.

Как вы, возможно, догадались, есть шанс, что ActionBar можно увидеть до того, как он будет скрыт отложенной операцией. Это на самом деле. В большинстве случаев ничего не видно, но все же время от времени вы можете увидеть мерцание ActionBar в течение секунды.

В любом случае это не очень приемлемое решение, поэтому я приветствую любые предложения.

Дополнение для v7 поддерживает пользователя панели действий, код будет:

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

Если вы используете ActionBarSherlock, то используйте Theme.Sherlock.NoActionBar Theme в своей деятельности

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

Используя этот простой код в вашем .class файле, чтобы скрыть панель действий

 getSupportActionBar().hide(); 

Создайте два стиля:

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

Установите AppThemeNoBar в качестве темы приложения и AppThemeBar в действие, в котором вы хотите показать ActionBar. Используя два стиля, вы не увидите панель действий во время загрузки представлений.

Проверьте эту ссылку Android: скрыть панель действий при просмотре нагрузки

Привет, у меня есть простое решение, используя 2 темы

  1. Тема всплывающего экрана (добавьте его в манифест):

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

  2. Нормальная тема (добавьте ее в свою деятельность с помощью setTheme (R.style.Theme)):

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

Для поддержки SDK 10:

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

Я также пытался скрыть Action Bar на Android 2.2, но ни одно из этих решений не работало. Все заканчивается катастрофой. Я проверил DDMS LOg, Он говорил мне использовать «Theme.AppCompat». В последнее время я решил проблему, изменив android:theme="@android:style/Theme.Holo.Light.NoActionBar" Line

В android:theme="@style/Theme.AppCompat.NoActionBar" и это сработало, но интерфейс был темным.

android:theme="@style/Theme.AppCompat.Light.NoActionBar" я попробовал android:theme="@style/Theme.AppCompat.Light.NoActionBar" и, наконец, получил то, что хотел.

После этого, когда я узнал о «AppCompat» на сайте разработчика, я получил это.

Поэтому я считаю, что решение для Android 2.2

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

И извините за мой плохой английский, как всегда.

Лучший результат для меня заключался в создании активности с ThemeNoTitleBar и без содержимого в качестве запуска. Затем эта деятельность обращается непосредственно к другой.

Конечно, если вы хотите, вы можете добавить контент в Splash Activity, но в моем случае я просто хотел показать приложение напрямую.

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> 

Мероприятия:

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

}

Если вы используете один Activity включенный заставку, тогда вы можете сделать это, если используете SherlockActionBar

 getSupportActionBar().hide(); 

После всплывающего экрана вы можете показать его снова с помощью …

 getSupportActionBar().show(); 

Он должен быть таким же с родным ActionBar Android.

Решение @Clerics работает. Но, похоже, это также проблема с некоторыми приложениями для игры в googles: googles, play store, talk. Также другие крупные приложения, такие как skype.

EDIT : Решение Bellow дало мне проблему для actionbarsherlock на api <4.0, причина, по которой setTheme не работает, предварительно сэндвич с мороженым

Добавьте в свой манифест следующие теги приложения или активности:

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

И затем в вашей основной деятельности:

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

Лучший и простой

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

2015, используя библиотеку поддержки v7 с темой AppCompat, задайте эту тему для своей деятельности.

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

Для Splashscreen вы должны использовать эту строку в manifest и не использовать getActionBar()

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

И один раз, когда операция Splash завершена в основном использовании Activity ниже или ничего

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

Попробуйте это, это работает для меня:

Ниже удаляется строка заголовка деятельности.

  requestWindowFeature(Window.FEATURE_NO_TITLE); 

Ниже удаляется панель уведомлений, чтобы сделать работу в полноэкранном режиме

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

(Полный пример ниже) Обратите внимание: эти методы были вызваны до того, как мы установили представление содержания нашей деятельности

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

Это может быть удобно
Добавьте это в свой манифест

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

ура

Лучшим способом, который я нахожу после прочтения всех доступных опций, является установка основной темы без ActionBar, а затем настройка MyTheme в коде родителем всей Activity.

Manifest:

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

BaseActivity:

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

Этот способ помогает мне избежать ActionBar при запуске приложения!

Уже выпущенные решения пришли с помощью sideffect, что первый вызов .show () не анимировал ActionBar для меня. У меня есть еще одно приятное решение, в котором исправлено:

Создайте прозрачный drawable – что-то вроде этого:

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

Установите фактический фон панели действий в невидимое пользовательское представление, которое вы установили на панели действий:

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

Установите прозрачный фон для панели действий в onCreate:

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

Imortant: не скрывать панель действий сразу в onCreate, но с небольшой задержкой позже – например, когда макет закончен с созданием:

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

Перед тем, как ваш первый вызов .show () установит видимый пользовательский вид:

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

Если у вас есть нуль, потому что вы используете библиотеку поддержки , вместо getActionBar() вам нужно вызвать getSupportActionBar() .

Поместите ваш заставку в отдельное действие и используйте startActivityForResult из startActivityForResult вашего основного действия, чтобы отобразить его. Это работает, потому что, согласно документам:

В качестве специального случая, если вы вызываете startActivityForResult () с requestCode> = 0 во время начального onCreate (Bundle savedInstanceState) / onResume () вашей активности, то ваше окно не будет отображаться до тех пор, пока результат не будет возвращен из начатой ​​активности , Это делается для того, чтобы избежать видимого мерцания при перенаправлении на другую активность.

Вероятно, вы должны сделать это, только если аргумент onCreate равен null (что указывает на новый запуск вашей активности, а не перезапуск из-за изменения конфигурации).

У меня все еще была ошибка с нулевым указателем, и, наконец, это помогло, когда я вызвал первый getWindow (). RequestFeature (), а затем super.onCreate ()

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

Просто добавьте это в свои styles.xml

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

Фактически, вы могли бы просто установить всплеск Activity с помощью NoActionBar и установить основное activity с помощью панели действий.

Я понимаю, что ссылки для ссылок – это не лучший способ сделать что-то, но я настоятельно рекомендую вам прочитать следующую документацию от Google. Это официальный документ android doc о том, как управлять вашей системой ui (например, панель действий, панель навигации и т. Д.). К сожалению, информация слишком большая, чтобы публиковать сообщения напрямую, но после прочтения этого вы точно поймете, как показывать и скрывать функции независимо от того, какую версию вы разрабатываете, так просто!

Покоряйте связь, когда-либо меняющуюся, ее можно найти в официальной документации по Android для обучения -> начало работы -> Лучшие практики для пользовательского интерфейса -> Управление системой ui

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

Введите описание изображения здесь

Вы можете использовать это:

getSupportActionBar().hide(); Если он не работает, попробуйте следующее:

 getActionBar().hide(); 

Если выше не работает, попробуйте вот так:

В вашем каталоге = res / values ​​/ style.xml, откройте style.xml -> есть parent изменение атрибута parent="Theme.AppCompat.Light.DarkActionBar"

Если все это тоже не работает. Я больше не знаю. Но для меня это работает.