L'impostazione android:windowActionBar="false"
disabilita veramente ActionBar ma poi, come dici tu, getActionBar();
restituisce null. Questo è risolto da:
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
Questo crea l'ActionBar e lo nasconde immediatamente prima che potesse essere visualizzato.
Ma ora c'è un altro problema. Dopo aver windowActionBar="false"
inserito il tema, l'attività disegna il suo normale titolo della finestra anziché una barra delle azioni.
Se proviamo a evitarlo utilizzando alcuni dei *.NoTitleBar
temi di borsa o proviamo a inserire il <item name="android:windowNoTitle">true</item>
nostro tema, non funzionerà.
Il motivo è che ActionBar dipende dal titolo della finestra per visualizzarsi, ovvero ActionBar è un titolo della finestra trasformato.
Quindi il trucco che ci può aiutare è aggiungere un'altra cosa al nostro tema XML di attività:
<item name="android:windowActionBar">false</item>
<item name="android:windowTitleSize">0dp</item>
Ciò renderà il titolo della finestra con altezza zero, quindi praticamente invisibile.
Nel tuo caso, dopo aver finito di visualizzare la schermata iniziale puoi semplicemente chiamare
setContentView(R.layout.main);
getActionBar().show();
e il gioco è fatto. L'attività inizierà senza sfarfallio di ActionBar, né con il titolo della finestra visualizzato.
ADDON:
Se mostri e nascondi ActionBar più volte, potresti aver notato che il primo show non è animato. Da quel momento in poi mostrare e nascondere sono animati. Se vuoi avere anche l'animazione al primo spettacolo puoi usare questo:
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();
}
});
La stessa cosa si può ottenere con:
protected void onPostResume() {
super.onPostResume();
getActionBar().hide();
ma potrebbe essere necessario un po 'di logica in più per verificare se questa è la prima rappresentazione dell'Attività.
L'idea è di ritardare un po 'il nascondiglio di ActionBar. In un certo senso lasciamo che ActionBar venga mostrato, ma poi lo nascondiamo immediatamente. Quindi andiamo oltre il primo spettacolo non animato e il prossimo spettacolo sarà considerato secondo, quindi sarà animato.
Come avrai intuito, c'è la possibilità che ActionBar possa farlo essere visto prima che fosse nascosto dall'operazione ritardata. Questo è in realtà il caso. Il più delle volte non si vede nulla ma, ogni tanto, è possibile vedere lo sfarfallio di ActionBar per una frazione di secondo.
In ogni caso questa non è una soluzione carina, quindi accolgo con favore eventuali suggerimenti.
Aggiunta per l'utente della barra delle azioni di supporto v7, il codice sarà:
getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
getSupportActionBar().hide();
Theme.AppCompat.Light
... utilizzare questo come rispondere [1] [1]: stackoverflow.com/a/25365193/1364896