Ich muss den Begrüßungsbildschirm in meiner Waben-App implementieren. Ich verwende diesen Code in onCreate der Aktivität, um Splash anzuzeigen:
setContentView(R.layout.splash);
getActionBar().hide();
und dieser Code, um die Hauptbenutzeroberfläche nach einiger Zeit anzuzeigen:
setContentView(R.layout.main);
getActionBar().show();
Aber bevor onCreate genannt wird und Splash erscheint, gibt es wenig Zeit , wenn der Aktionsleiste angezeigt.
Wie kann ich die Aktionsleiste unsichtbar machen?
Ich habe versucht, ein Thema auf Aktivitäten ohne Aktionsleiste anzuwenden:
<item name="android:windowActionBar">false</item>
In diesem Fall gibt getActionBar () immer null zurück und ich habe keine Möglichkeit gefunden, es erneut anzuzeigen.
android
android-3.0-honeycomb
android-actionbar
Ilya Izhovkin
quelle
quelle
Theme.AppCompat.Light
... nutzen diese wie man Antwort [1] [1]: stackoverflow.com/a/25365193/1364896Antworten:
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: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:
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
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:
Dasselbe kann erreicht werden mit:
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:
quelle
setTheme
? Da Ihre Antwort gut funktioniert, wenn ich das Thema aus dem Manifest heraus einstelle, aber wenn ich es inonCreate
(in meinem Fall hängt das Thema von einer Präferenz für ein helles oder dunkles Thema ab) mache, blinkt die Standard-Holo-Aktionsleiste vor der in meinem Thema festgelegten wie auch immer. Aber vielleicht ist dies eine weitere vollständige SO-Frage wert.android:theme="@android:style/Theme.NoTitleBar"
im Manifest und dannsetTheme(R.style.MyTheme)
in den Hauptaktivitäten gelöstonCreate
. Dies stellt sicher, dass (in Android 4+) das Aufblitzen des Standard-HolosActionBar
vor dem in meinem Thema definierten vermieden wird (ich bin hier angekommen, um dies zu umgehen; ich benötige eigentlich keinen Begrüßungsbildschirm).getSupportActionBar().hide();
nachgetWindow().requestFeature(Window.FEATURE_ACTION_BAR);
und alles explodiert mit einem NPE. Irgendwelche Ideen? Problem mitTheme.AppCompat
?Verwenden Sie diesen einfachen Code in Ihrer .class-Datei, um die Aktionsleiste auszublenden
quelle
Wenn Sie ActionBarSherlock verwenden, verwenden Sie Theme.Sherlock.NoActionBar Theme in Ihrer Aktivität
quelle
<activity android:theme="@android:style/Theme.NoActionBar">
.Theme.Sherlock.NoActionBar
anrufengetActionBar()
odergetSupportActionBar()
(um anschließend die Aktionsleiste anzuzeigen) null zurückgeben ...error: Error: No resource found that matches the given name (at 'theme' with value '@android:style/ Theme.NoActionBar').
Erstellen Sie zwei Stile:
Legen Sie AppThemeNoBar als Anwendungsthema und AppThemeBar auf die Aktivität fest, in der Sie die ActionBar anzeigen möchten. Wenn Sie zwei Stile verwenden, wird die Aktionsleiste beim Laden der Ansichten nicht angezeigt.
Überprüfen Sie diesen Link Android: Aktionsleiste beim Laden der Ansicht ausblenden
quelle
Hallo, ich habe eine einfache Lösung mit 2 Themen
Begrüßungsbildschirm-Thema (zum Manifest hinzufügen):
<style name="SplashTheme" parent="@android:style/Theme.Holo.NoActionBar"> <item name="android:windowBackground">@color/red</item> </style>
normales Thema (fügen Sie es in Ihrer Aktivität von setTheme (R.style.Theme) hinzu):
<style name="Theme" parent="@style/Theme.Holo"> <item name="android:windowBackground">@color/blue</item> </style>
So unterstützen Sie SDK 10:
quelle
Ich habe auch versucht, die Aktionsleiste unter Android 2.2 auszublenden, aber keine dieser Lösungen hat funktioniert. Alles endet mit einem Absturz. Ich habe das DDMS-LOg überprüft. Es hat mir gesagt, dass ich 'Theme.AppCompat' verwenden soll. Zuletzt habe ich das Problem durch Ändern der
android:theme="@android:style/Theme.Holo.Light.NoActionBar"
Zeile gelöstin
android:theme="@style/Theme.AppCompat.NoActionBar"
und es funktionierte, aber das Interface war dunkel.dann habe ich versucht
android:theme="@style/Theme.AppCompat.Light.NoActionBar"
und endlich bekommen was ich wollte.Danach, als ich auf der Entwicklerseite nach 'AppCompat' suchte, bekam ich Folgendes .
Ich denke also, die Lösung für Android 2.2 ist
Und Entschuldigung für mein schlechtes Englisch wie immer.
quelle
Das beste Ergebnis für mich war, eine Aktivität mit ThemeNoTitleBar und ohne Inhalt als Launcher zu erstellen. Dann ruft diese Aktivität direkt den anderen an.
Wenn Sie möchten, können Sie der Splash-Aktivität natürlich Inhalte hinzufügen, aber in meinem Fall wollte ich die Anwendung nur direkt anzeigen.
Manifest:
Aktivität:
}}
quelle
Wenn Sie einen
Activity
mit Begrüßungsbildschirm verwendeten verwenden, können Sie dies tun, wenn Sie verwendenSherlockActionBar
Nach dem Begrüßungsbildschirm können Sie es erneut mit ...
Dies sollte auch bei nativen
ActionBar
Android- Geräten der Fall sein .quelle
@ Clerics-Lösung funktioniert. Dies scheint jedoch auch ein Problem bei einigen nativen Apps von Googles zu sein: Googles, Play Store, Talk. Auch andere große Apps wie Skype.
EDIT : Die folgende Lösung hat mir ein Problem mit dem Actionbarsherlock auf API <4.0 beschert. Der Grund dafür ist, dass setTheme vor dem Eiscremesandwich nicht funktioniert
Fügen Sie in Ihrem Manifest in Ihren Anwendungs- oder Aktivitäts-Tags Folgendes hinzu:
Und dann in Ihrer Haupttätigkeit:
quelle
am besten und einfach
requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
quelle
Legen Sie 2015 mithilfe der Support v7-Bibliothek mit dem AppCompat-Thema dieses Thema für Ihre Aktivität fest.
quelle
Denn
Splashscreen
du solltest diese Zeile verwendenmanifest
und nicht verwendengetActionBar()
und einmal, wenn Splash
Activity
in der HauptverwendungActivity
unten beendet ist oder nichtsquelle
<item android:name="android:windowActionBar">true</item>
wird diesen Fehler los, aber ich weiß nicht, ob es noch funktioniert.Versuchen Sie dies, es funktioniert für mich:
Unten wird die Titelleiste der Aktivität entfernt
Unten wird die Benachrichtigungsleiste entfernt, damit die Aktivität im Vollbildmodus ausgeführt wird
(Vollständiges Beispiel unten) Beachten Sie: Diese Methoden wurden aufgerufen, bevor wir die Inhaltsansicht unserer Aktivität festlegen
quelle
Dies kann nützlich sein,
um dies Ihrem Manifest hinzuzufügen
Prost
quelle
Der beste Weg, den ich nach dem Lesen aller verfügbaren Optionen finde, besteht darin, das Hauptthema ohne ActionBar festzulegen und dann MyTheme im Code übergeordneter aller Aktivitäten einzurichten.
Manifest:
BaseActivity:
Auf diese Weise kann ich ActionBar beim Start der Anwendung vermeiden!
quelle
Die bereits veröffentlichten Lösungen hatten den Nebeneffekt, dass der erste Aufruf von .show () die ActionBar für mich nicht animierte. Ich habe eine andere nette Lösung bekommen, die das behoben hat:
Erstellen Sie ein transparentes Zeichen - so etwas:
Stellen Sie den tatsächlichen Hintergrund der Aktionsleiste auf eine unsichtbare benutzerdefinierte Ansicht ein, die Sie in der Aktionsleiste festgelegt haben:
Legen Sie den transparenten Hintergrund für die Aktionsleiste in onCreate fest:
Wichtig: Blenden Sie die Aktionsleiste nicht sofort in onCreate aus, sondern mit einer kleinen Verzögerung später - z. B. wenn das Layout mit der Erstellung fertig ist:
Stellen Sie vor Ihrem ersten Aufruf von .show () die benutzerdefinierte Ansicht sichtbar ein:
quelle
Falls Sie null haben, weil Sie die Support-Bibliothek verwenden ,
getActionBar()
müssen Sie nicht aufrufengetSupportActionBar()
.quelle
Fügen Sie dies einfach in der onCreate-Funktion zu Ihrer MainActivity hinzu.
quelle
supportActionBar?.apply { hide() }
Platzieren Sie Ihren Begrüßungsbildschirm in einer separaten Aktivität und verwenden
startActivityForResult
Sie dieonCreate
Methode Ihrer Hauptaktivität , um ihn anzuzeigen. Dies funktioniert, weil laut den Dokumenten:Sie sollten dies wahrscheinlich nur tun, wenn das Argument dazu
onCreate
lautetnull
(was auf einen Neustart Ihrer Aktivität hinweist, im Gegensatz zu einem Neustart aufgrund einer Konfigurationsänderung).quelle
Ich hatte immer noch einen Fehler mit dem Nullzeiger und schließlich half es, als ich zuerst getWindow (). RequestFeature () und dann super.onCreate () aufrief.
quelle
Fügen Sie dies einfach in Ihre styles.xml ein
quelle
Eigentlich könnten Sie einfach Splash
Activity
mitNoActionBar
und Ihre Hauptactivity
mit Aktionsleiste einstellen .quelle
Der beste Weg, dies zu tun, besteht darin, die erste Aktivität als leere Aktivität und den Inhalt, den Sie einfügen möchten, zu erstellen und nach einiger Zeit eine weitere Aktivität auszulösen. Auf diese Weise können Sie die erste Aktivität als Begrüßungsbildschirm ohne Aktionsleiste oder ähnliches ausführen. Hier ist meine erste Aktivität
Danach können Sie jede Ihrer Aktivitäten als erste Aktivität festlegen. Wenn Sie keine Aktionsleiste in einem Bildschirm wünschen, fügen Sie diese einfach in Ihre Stile ein
quelle
Android Studio bietet eine Build-Vorlage für den Vollbildmodus. Wenn Sie Android Studio verwenden, können Sie den folgenden Schritt ausführen, um die Vollbildaktivität zu implementieren.
Getan. Android Studio hat Ihren Job gemacht, jetzt können Sie den Code für den Vollbildmodus überprüfen.
quelle
Dies ist der beste Weg, den ich verwendet habe. Gehe zu Java-Datei, nachdem
onCreate
:quelle
Mir ist klar, dass das Posten von Links nicht der beste Weg ist, aber ich empfehle Ihnen dringend, die folgende Dokumentation von Google selbst zu lesen. Dies ist das offizielle Android-Dokument zur Steuerung Ihrer System-Benutzeroberfläche (z. B. Aktionsleiste, Navigationsleiste usw.). Leider sind die Informationen zu viel, um sie direkt zu veröffentlichen, aber nachdem Sie dies gelesen haben, werden Sie genau verstehen, wie Sie Funktionen ein- und ausblenden, unabhängig davon, für welche Version Sie sie entwickeln. Es ist so einfach!
Falls sich der Link jemals ändert, finden Sie ihn in der offiziellen Android-Dokumentation unter Training -> Erste Schritte -> Best Practices für die Benutzeroberfläche -> Verwalten der System- Benutzeroberfläche
https://developer.android.com/training/system-ui/index.html
quelle
Sie können dies verwenden:
getSupportActionBar().hide();
Wenn es nicht funktioniert, versuchen Sie Folgendes:Wenn dies nicht funktioniert, versuchen Sie es wie folgt:
Öffnen Sie in Ihrem Verzeichnis = res / values / style.xml style.xml -> es gibt eine Attributänderung
parent
inparent="Theme.AppCompat.Light.DarkActionBar"
wenn das alles auch nicht funktioniert. Ich weiß es nicht mehr. aber bei mir funktioniert es.
quelle