Durch das Festlegen wird android:windowActionBar="false"
die Aktionsleiste wirklich deaktiviert, aber dann wird, wie Sie sagen, getActionBar();
null zurückgegeben. Dies wird gelöst durch:
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
Dadurch wird die ActionBar erstellt und sofort ausgeblendet, bevor sie angezeigt werden kann.
Aber jetzt gibt es ein anderes Problem. Nach windowActionBar="false"
dem Einfügen des Themas zeichnet die Aktivität ihren normalen Fenstertitel anstelle einer Aktionsleiste.
Wenn wir versuchen, dies zu vermeiden, indem wir einige der *.NoTitleBar
Standardthemen verwenden, oder wenn wir versuchen, ein <item name="android:windowNoTitle">true</item>
eigenes Thema einzufügen, funktioniert dies nicht.
Der Grund dafür ist, dass die ActionBar vom Fenstertitel abhängt , um sich selbst anzuzeigen - das heißt, die ActionBar ist ein transformierter Fenstertitel.
Der Trick, der uns helfen kann, besteht darin, unserem Aktivitätsthema xml noch etwas hinzuzufügen:
<item name="android:windowActionBar">false</item>
<item name="android:windowTitleSize">0dp</item>
Dadurch wird der Fenstertitel mit einer Höhe von Null praktisch unsichtbar.
In Ihrem Fall können Sie nach dem Anzeigen des Begrüßungsbildschirms einfach anrufen
setContentView(R.layout.main);
getActionBar().show();
und du bist fertig. Die Aktivität wird gestartet, ohne dass die ActionBar flackert oder der Fenstertitel angezeigt wird.
ADDON:
Wenn Sie ein- und ausblenden die ActionBar mehrere Male vielleicht haben Sie bemerkt , dass die erste Vorführung ist nicht animiert. Von da an werden das Ein- und Ausblenden animiert. Wenn Sie auch bei der ersten Show eine Animation haben möchten, können Sie Folgendes verwenden:
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();
}
});
Dasselbe kann erreicht werden mit:
protected void onPostResume() {
super.onPostResume();
getActionBar().hide();
Möglicherweise ist jedoch eine zusätzliche Logik erforderlich, um zu überprüfen, ob dies die erste Anzeige der Aktivität ist.
Die Idee ist, das Verstecken der ActionBar etwas zu verzögern. In gewisser Weise lassen wir die ActionBar anzeigen, verstecken sie dann aber sofort. Wir gehen also über die erste nicht animierte Show hinaus und die nächste Show wird als zweite betrachtet, also wird sie animiert.
Wie Sie vielleicht schon erraten haben gibt es eine Chance , dass die ActionBar könnte , bevor es durch die verzögerte Operation versteckt wurde gesehen werden. Dies ist tatsächlich der Fall. Meistens ist nichts zu sehen, aber ab und zu flackert die ActionBar für den Bruchteil einer Sekunde.
Auf jeden Fall ist dies keine schöne Lösung, daher freue ich mich über Vorschläge.
Zusätzlich für v7 Unterstützung ActionBar Benutzer, wird der Code sein:
getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
getSupportActionBar().hide();
Theme.AppCompat.Light
... nutzen diese wie man Antwort [1] [1]: stackoverflow.com/a/25365193/1364896