Ich habe ein seltsames Problem. Ich mache eine App mit targetdk 13.
In der onCreate-Methode meiner Hauptaktivität rufe ich auf, getActionBar()
um meine Aktionsleiste einzurichten. Dies funktioniert gut, wenn es auf dem Android 3.2-Emulator ausgeführt wird. Bei Verwendung von Android 3.0 und 3.1 gibt die getActionBar()
Methode jedoch null zurück.
Ich finde das extrem seltsam und kann keinen Grund erkennen, warum es so wäre. Ist dies ein Fehler mit den Emulatoren oder muss ich etwas tun, um sicherzustellen, dass meine Anwendung über eine Aktionsleiste verfügt?
LÖSUNG:
Ich glaube, ich habe eine Lösung für dieses Problem gefunden. Ich habe setContentView nicht verwendet, um ein Layout für die Aktivität festzulegen. Stattdessen habe ich fragmentTransaction.add(android.R.id.content, mFragment, mTag)
der Aktivität ein Fragment hinzugefügt. Dies hat in 3.2 gut funktioniert, aber in früheren Wabenversionen ist die Aktionsleiste anscheinend nicht festgelegt, wenn Sie setContentView nicht in der onCreate()
Methode verwenden. Also habe ich es behoben, indem ich die setContentView()
Methode in meiner onCreate()
Methode verwendet und sie nur mit einem Layout versehen habe, das ein leeres FrameLayout enthielt. Ich kann die fragmentTransaction.add(android.R.id.content, mFragment, mTag)
Methode immer noch genauso verwenden wie zuvor.
Es ist nicht die schönste Lösung, aber es funktioniert.
quelle
Antworten:
Kann
getSupportActionBar()
anstelle dergetActionBar()
Methode verwenden.quelle
Wenn Sie die Support-Bibliothek verwenden
verwenden
getSupportActionBar()
stattgetActionBar()
* Update:
Die Klasse ActionBarActivity ist jetzt veraltet:
Ich empfehle zu verwenden:
quelle
android.support.v7.app
:ActionBarActivity
veraltet Verwenden Sieandroid.support.v7.app.AppCompatActivity
stattdessen.Sie müssen den Fenstertyp als Aktionsleiste definieren, bevor die Aktivität ihre Ansicht rendert.
verwenden
vor dem Aufruf der Methode setContentView ().
quelle
Wenn Sie android.support.v7.app.AppCompatActivity verwenden
öffentliche Klasse HomeActivity erweitert AppCompatActivity {
Dann sollten Sie android.support.v7.app.ActionBar verwenden
Wenn Sie android.support.v4.app.FragmentActivity verwenden
öffentliche Klasse HomeActivity erweitert FragmentActivity {
dann sollten Sie android.app.ActionBar verwenden
Wenn Sie android.support.v7.app.ActionBarActivity verwenden
öffentliche Klasse HomeActivity erweitert ActionBarActivity {
Sie sollten android.support.v7.app.ActionBar verwenden
quelle
Ich war mit dem obigen Problem konfrontiert, bei dem die
getActionBar()
Methode null zurückgibt. Ich habe das angerufen,getActionBar()
nachdem ich das eingestellt habesetContentView()
und es immer noch zurückgegeben wirdnull
.Ich habe das Problem behoben, indem ich die min-sdk-Version in der Android Manifest-Datei festgelegt habe, die anfangs fehlte.
<uses-sdk android:minSdkVersion="11" />
quelle
ActionBar benötigt das Thema der Anwendung oder Aktivität, um einen App-Titel zu haben. Stellen Sie sicher, dass Sie Ihre Anwendung oder Aktivität nicht als Theme.NOTITLE gestaltet haben.
quelle
dann
dann benutze
quelle
Diese Antwort ist spät, kann aber für jeden hilfreich sein, der von Google kommt: Möglicherweise müssen Sie dies deklarieren
in deinem
styles.xml
. Es scheintfalse
die Standardeinstellung zu sein. Sie müssen außerdem API 11 oder höher verwenden.Weitere Details finden Sie in der Dokumentation hier . Insbesondere zitieren:
quelle
Ich hatte das gleiche Problem und eine der Lösungen war,
setContentView()
vor dem Anruf zu verwendengetActionBar()
.Aber es gab noch eine andere Sache, die das Problem behoben hat. Ich habe ein Thema für die Anwendung angegeben
@android:style/Theme.Holo.Light
.Ich denke, jedes Thema, das darin enthalten ist
<item name="android:windowActionBar">true</item>
, kann verwendet werden.quelle
Der Hauptgrund dafür ist die Verwendung von Themen, die ActionBar nicht unterstützen:
Fügen Sie in der Manifestdatei Folgendes entweder in Ihre Zielaktivität oder in Ihr Anwendungselement ein (wenn Sie das Thema über die gesamte Anwendung hinweg vereinheitlichen möchten).
Beispiele für Themen, die die Aktionsleiste unterstützen
"Theme.AppCompat.Light"
oder"Theme.Holo.Light"
...Es ist besser, alle Stile einzufügen
styles.xml
und überall zu verwenden,"@style/themName"
damit der vorherige verwendet wirdund styles.xml haben Folgendes:
Hinweise:
"@android:style/Theme.Holo.Light.DarkActionBar"
sie vor SDKs Version 14 nicht unterstützt werden.Damit Ihre App eine bestimmte Mindestversion des SDK unterstützt, können Sie unter
<app>
Element Folgendes hinzufügen :Um die minimale SDK-Version in AndroidStudio anzugeben, können Sie die Gradle-Datei der App verwenden.
quelle
Ich bin auf dieses Problem gestoßen. Ich habe nach der Versionsnummer gesucht und die Aktionsleiste nur aktiviert, wenn sie größer oder gleich Honeycomb ist, aber null zurückgegeben. Ich fand den Grund und die Hauptursache, dass ich den Holo-Theme-Stil in style.xml im Ordner values-v11 deaktiviert hatte.
quelle
Gehen Sie zur Datei AndroidManifest.xml und ersetzen Sie sie
android: theme = "@ style / AppTheme"
android: theme = "@ android: style / Theme.Holo.Light.DarkActionBar"
quelle
Verwenden Sie getSupportActionBar () anstelle von getActionBar ()
quelle
In meinem Fall hatte ich dies in meinem Code, was nicht funktionierte:
Dann habe ich mit der Reihenfolge des Codes gespielt:
Und es hat funktioniert!
Schlussfolgerung: requestWindowFeature sollte das erste sein, was Sie in der onCreate-Methode aufrufen.
quelle
Ich hatte das gleiche Problem. Es wurde gelöst, indem das App-Thema in styles.xml geändert wurde
Vor
Nach dem
quelle
Eine Sache, die ich hinzufügen wollte, da ich gerade darauf gestoßen bin: Wenn Sie versuchen, ActionBar () für eine Aktivität mit einem übergeordneten Element abzurufen, wird null zurückgegeben. Ich versuche, Code umzugestalten, in dem meine Aktivität in einer ActivityGroup enthalten ist, und es dauerte einige Minuten, bis ich "oh duh" ging, nachdem ich mir die Quelle angesehen hatte, wie eine ActionBar in der Quelle erstellt wird.
quelle
Ich löse es durch diese Änderungen:
android:theme="@android:style/Theme.Holo.Light" >
extends ActionBarActivity
import android.support.v7.app.ActionBarActivity
quelle
So ergänzen Sie die anderen Antworten:
Stellen Sie sicher, dass Sie
setActionBar()
odersetSupportActionBar()
in IhreronCreate()
Methode aufrufen, bevor Sie Folgendes aufrufengetActionBar()
:Definieren Sie eine Symbolleiste in Ihrer activity.xml und dann in onCreate ():
quelle
Ich weiß, dass ich zu spät zur Party komme (und neu bei Android), aber ich fand die Informationen hier sehr hilfreich und dachte, ich sollte die Ergebnisse meiner eigenen Bemühungen hinzufügen, ActionBar so zu machen, wie ich es wollte, falls andere wie ich kommen Suche nach Hilfe.
Ich habe ein Widget, das ein schwebendes Fenster ohne Fenstertitel ist. Ich verwende ein Stilthema, um zu implementieren
android:windowIsFloating
,android:backgroundDimEnabled
undandroid:windowNoTitle
. Das Widget funktionierte einwandfrei, bis ich eine Schaltfläche hinzufügen wollte, die einen Fragment-Pager mit mehreren Listenfragment-Seiten aufrief und die ActionBar verwendete. Es würde bei der Pager-Aktivität mit einer Nullzeiger-Ausnahme abstürzen. Ich habe es auf die ActionBar eingegrenzt, die null ist. Nach den Erkenntnissen früherer Personen, die zu diesem Thread beigetragen haben, habe ich mein Thema aus der Manifestdatei entfernt und die ActionBar hat einwandfrei funktioniert, aber jetzt schwebte mein Fenster länger (es war Vollbild) und es hatte einen Seitentitel, den ich nicht wollte.Weitere Nachforschungen führten mich zum API-Schulungshandbuch für Stile und Themen, das mich zu einer Lösung führte. Ich habe festgestellt, dass ich mein benutzerdefiniertes Thema zu einzelnen Aktivitäten in der Manifestdatei hinzufügen kann, bevor ich es auf die Anwendung angewendet habe. Alle meine Fenster haben jetzt das gewünschte Aussehen.
quelle
Versuchen Sie, Ihre Aktivitätsklasse von ActionBarActivity aus zu erweitern. Das hat es für mich gelöst. Gehen Sie wie folgt vor:
In meinem Fall erstreckte sich die Klasse nur von Aktivität.
quelle
Dies kann auch einigen Menschen helfen.
In meinem Fall lag es daran, dass ich in der menu.xml keinen Kontext definiert hatte
Versuche dies:
An Stelle von:
quelle
Überprüfen Sie einfach die Implementierung des Quellcodes per Befehlsklick:
requestWindowFeature (Window.FEATURE_ACTION_BAR); Ich habe mein Problem behoben, als ich sah, dass requestWindowFeature (Window.FEATURE_ACTION_BAR) fehlschlägt. Code ist Open Source benutze es !!
quelle
android.support.v7.app.ActionBar actionBar = getSupportActionBar();
funktioniert ziemlich schnell
quelle
In meinem Fall musste ich einfach verlängern
AppCompatActivity
stattActivity
Beispielklasse für vollständige Aktivität:
android.os.Bundle importieren androidx.appcompat.app.AppCompatActivity importieren
Auf Versionen
quelle