Как скрыть панель действий перед созданием активности, а затем показать ее снова? - PullRequest
235 голосов
/ 14 декабря 2011

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

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

и этот код для отображения основного интерфейса через некоторое время:

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

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

Как сделать панель действий невидимой?

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

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

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

Ответы [ 26 ]

6 голосов
/ 02 апреля 2015

лучше и проще

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

4 голосов
/ 14 декабря 2011

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

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

и один раз, когда Splash Activity заканчивается в основном Activity, используйте ниже или ничего

<item name="android:windowActionBar">true</item>
3 голосов
/ 29 июля 2014

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

Ниже избавляется от строки заголовка действия

 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();
    }
3 голосов
/ 10 ноября 2014

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

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

ура

2 голосов
/ 16 января 2015

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

Манифест:

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

BaseActivity:

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

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

1 голос
/ 03 апреля 2013

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

Создание прозрачной прорисовки - что-то вроде этого:

<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();
1 голос
/ 17 февраля 2015

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

0 голосов
/ 01 июня 2018

Лучший способ сделать это - создать первое действие как пустое действие и контент, который вы хотите поместить, и через некоторое время запустить другое действие. Следуя этому пути, вы можете выполнить первое действие в качестве заставки без панели действий или чего-либо еще. Вот мое первое занятие

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

}
}

После этого вы можете поместить любое из ваших действий в качестве первого действия Если вы не хотите использовать панель действий на каком-либо экране, просто добавьте это в свои стили

    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
0 голосов
/ 04 октября 2015

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

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

getActionBar().hide();

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

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

0 голосов
/ 12 апреля 2014

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

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