Ustawienie android:windowActionBar="false"
naprawdę wyłącza pasek ActionBar, ale następnie, jak mówisz, getActionBar();
zwraca null. Rozwiązuje to:
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
Spowoduje to utworzenie ActionBar i natychmiast ukrywa go, zanim miał szansę zostać wyświetlony.
Ale teraz jest inny problem. Po wstawieniu windowActionBar="false"
motywu działanie rysuje normalny tytuł okna zamiast paska działań.
Jeśli spróbujemy tego uniknąć, używając niektórych *.NoTitleBar
podstawowych motywów lub spróbujemy wprowadzić <item name="android:windowNoTitle">true</item>
własny motyw, nie zadziała.
Powodem jest to, że pasek akcji zależy od wyświetlanego tytułu okna - to znaczy pasek akcji jest przekształconym tytułem okna.
Zatem sztuczka, która może nam pomóc, polega na dodaniu jeszcze jednej rzeczy do naszego tematu aktywności xml:
<item name="android:windowActionBar">false</item>
<item name="android:windowTitleSize">0dp</item>
Spowoduje to, że tytuł okna o zerowej wysokości będzie praktycznie niewidoczny.
W twoim przypadku po zakończeniu wyświetlania ekranu powitalnego możesz po prostu zadzwonić
setContentView(R.layout.main);
getActionBar().show();
i gotowe. Aktywność rozpocznie się bez migania paska ActionBar ani wyświetlania tytułu okna.
ADDON:
Jeśli wielokrotnie wyświetlasz i ukrywasz pasek ActionBar, być może zauważyłeś, że pierwszy pokaz nie jest animowany. Od tego momentu pokazywanie i ukrywanie się jest animowane. Jeśli chcesz mieć animację również przy pierwszym pokazie, możesz użyć tego:
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();
}
});
To samo można osiągnąć dzięki:
protected void onPostResume() {
super.onPostResume();
getActionBar().hide();
ale może potrzebować dodatkowej logiki, aby sprawdzić, czy jest to pierwszy pokaz działania.
Chodzi o to, aby nieco opóźnić ukrywanie paska ActionBar. W pewien sposób pozwalamy wyświetlać pasek ActionBar, ale natychmiast go ukrywamy. W ten sposób wykraczamy poza pierwszy nie animowany pokaz, a następny pokaz będzie uważany za drugi, a zatem będzie animowany.
Jak można się domyślić, jest szansa, że ActionBar mogłyby być postrzegane zanim została ukryta przez działanie opóźnione. Tak jest w rzeczywistości. Przez większość czasu nic nie jest widoczne, ale od czasu do czasu widać pasek ActionBar migający na ułamek sekundy.
W każdym razie nie jest to ładne rozwiązanie, dlatego z zadowoleniem przyjmuję wszelkie sugestie.
Dodatek dla użytkownika paska akcji obsługi v7 będzie następujący:
getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
getSupportActionBar().hide();
Theme.AppCompat.Light
... użyj tego Jak odpowiedzieć [1] [1]: stackoverflow.com/a/25365193/1364896