Налаштування android:windowActionBar="false"
по-справжньому відключає ActionBar, але потім, як ви кажете, getActionBar();
повертається до нуля. Це вирішується:
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"
теми, Активність малює звичайний заголовок вікна замість 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();
але може знадобитися додаткова логіка, щоб перевірити, чи це перше показ активності.
Ідея полягає в тому, щоб трохи затягнути приховування ActionBar. Деяким чином ми дозволяємо показувати ActionBar, але потім негайно приховуємо його. Таким чином, ми виходимо за рамки першого не анімаційного показу, а наступне показ будемо вважати другим, таким чином воно буде анімоване.
Як ви могли здогадатися, є ймовірність, що ActionBar можна побачити до того, як він був прихований затримкою операції. Це насправді так. Більшість випадків нічого не видно, але все ж, раз у раз, ви можете бачити мерехтіння ActionBar на частку секунди.
У будь-якому випадку це не дуже гарне рішення, тому я вітаю будь-які пропозиції.
Додаток для користувача панелі дій v7, код буде наступним:
getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
getSupportActionBar().hide();
Theme.AppCompat.Light
... використовувати це Як відповісти [1] [1]: stackoverflow.com/a/25365193/1364896