Diese Aktivität verfügt bereits über eine Aktionsleiste, die vom Fensterdekor bereitgestellt wird

497

Ich versuche, meine Inhalte Toolbaranstelle der Aktionsleiste zu verwenden , erhalte jedoch immer wieder die Fehlermeldung

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.tyczj.weddingalbum/com.xxx.xxx.MainActivity}: java.lang.IllegalStateException: This Activity already has an action bar supplied by the window decor. Do not request Window.FEATURE_ACTION_BAR and set windowActionBar to false in your theme to use a Toolbar instead.
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
            at android.app.ActivityThread.access$600(ActivityThread.java:141)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:5039)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.IllegalStateException: This Activity already has an action bar supplied by the window decor. Do not request Window.FEATURE_ACTION_BAR and set windowActionBar to false in your theme to use a Toolbar instead.
            at android.support.v7.app.ActionBarActivityDelegateBase.setSupportActionBar(ActionBarActivityDelegateBase.java:165)
            at android.support.v7.app.ActionBarActivity.setSupportActionBar(ActionBarActivity.java:92)
            at com.xxx.xxx.MainActivity.onCreate(MainActivity.java:113)
            at android.app.Activity.performCreate(Activity.java:5104)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
            at android.app.ActivityThread.access$600(ActivityThread.java:141)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:5039)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
            at dalvik.system.NativeStart.main(Native Method)

Also habe ich in meinem Stil hinzugefügt, dass meine Aktivität keine Aktionsleiste hat

<style name="AppCompatTheme" parent="@style/Theme.AppCompat.Light">
        <item name="android:windowActionBar">false</item>
</style>

und das Thema gilt für Aktivitäten in meinem Manifest

<activity
        android:name=".MainActivity"
        android:windowSoftInputMode="adjustResize|stateHidden"
        android:theme="@style/AppCompatTheme" android:screenOrientation="portrait"/>

MainActivity erweitert GooglePlayServiceActivity, sodass ich das Thema auch dort festlegen kann

<activity
       android:name=".GooglePlayServicesActivity"
       android:label="@string/title_activity_google_play_services"
       android:theme="@style/AppCompatTheme">

aber ich bekomme immer noch den Fehler. Ich fordere auch nirgendwo Fensterfunktion an. Irgendwelche Ideen, warum ich das noch bekomme?

tyczj
quelle

Antworten:

836

Ich denke, Sie entwickeln für Android Lollipop, aber schließen Sie trotzdem diese Zeile ein:

<item name="windowActionBar">false</item> 

zu Ihrer Themenerklärung innerhalb Ihrer app/src/main/res/values/styles.xml.

Wenn Sie eine AppCompatActivitySupport-Bibliothek ab Version 22.1 verwenden, fügen Sie diese Zeile hinzu:

<item name="windowNoTitle">true</item>

Ihre Themendeklaration könnte nach all diesen Ergänzungen so aussehen:

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>
Nadir Belhaj
quelle
18
ist windowActionBarnicht dasselbe wie android:windowActionBar?
Tyczj
65
Es ist, aber AppCompat-Zeug betrachtet das App-Namespace-Attribut, nicht das Android-Attribut. Auf diese Weise kann das Attribut auch auf Plattformen angegeben werden, auf denen es ursprünglich nicht vorhanden war. Auf diese Weise können Dinge wie colorPrimary zurückportiert werden.
Yarian
4
Als ich diese Zeile in meinen Stilen hinzufügte, stürzte die App ab :(
rkmax
9
Fügen Sie außerdem <item name = "windowNoTitle"> true </ item> hinzu. Wenn Sie AppCompatActivity nach 22.1 verwenden, unterstützen Sie die Bibliothek stackoverflow.com/a/29853299/1402525
Nick
4
Vergessen Sie nicht, dem Anwendungs-Tag in der Manifest-Datei Folgendes hinzuzufügen: android: theme = "@ style / AppTheme".
Live-Liebe
202

Eine andere einfache Möglichkeit besteht darin, Ihr Thema zu einem Kind Theme.AppCompat.Light.NoActionBarwie diesem zu machen :

<style name="NoActionBarTheme" parent="Theme.AppCompat.Light.NoActionBar">
     ...
</style>
MrEngineer13
quelle
Ich habe diese Methode auch ausprobiert, aber ich habe immer noch den Fehler erhalten. Wie auch immer das hätte sein können, bevor ich das Thema auf mein gesetzt habe GooglePlayServiceActivity, ich erinnere mich nicht
tyczj
1
Ja, das habe ich benutzt.
Stellen Sie
6
Ich finde diese Lösung eleganter als die von @Nadir Belhaj, obwohl beide korrekt sind.
VoghDev
Ich denke, dies ist die bessere Antwort, die Verwendung des Inline-XML-Attributs (windowActionBar = false) hat nicht funktioniert - ich habe den gleichen Fehler wie @tyczj
Booger
In diesem Fall können Sie Theme.AppCompat.Light.DarkActionBar nicht verwenden, was tatsächlich ein nützliches übergeordnetes Element ist.
f470071
125

In einzelne Zeile android:theme="@style/AppTheme.NoActionBar"zu activityin AndroidManifestund du getan hast.


AndroidManifest.xml :

<activity android:name=".activity.YourActivity"
          android:theme="@style/AppTheme.NoActionBar"><!-- ADD THIS LINE -->

styles.xml

<style name="AppTheme.NoActionBar">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
</style>
Volodymyr Kulyk
quelle
52

Um die Symbolleiste als Aktionsleiste zu verwenden, deaktivieren Sie zunächst die vom Dekor bereitgestellte Aktionsleiste.

Am einfachsten ist es, wenn Sie Ihr Thema erweitern

Theme.AppCompat.NoActionBar

(oder seine leichte Variante).

Zweitens erstellen Sie eine Symbolleisteninstanz, normalerweise über Ihr Layout-XML:

<android.support.v7.widget.Toolbar
    android:id=”@+id/my_awesome_toolbar”
    android:layout_height=”wrap_content”
    android:layout_width=”match_parent”
    android:minHeight=”?attr/actionBarSize”
    android:background=”?attr/colorPrimary” />

Stellen Sie dann in Ihrer Aktivität oder Ihrem Fragment die Symbolleiste so ein, dass sie als Aktionsleiste fungiert:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.blah);

    Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar);
    setSupportActionBar(toolbar);
}

Dieser Code hat bei mir funktioniert.

V_J
quelle
1
Vielen Dank! Ich habe vergessen, <android.support.v7.widget.Toolbarzu XML hinzuzufügen .
CoolMind
1
Ich konnte nicht herausfinden, warum meine Symbolleistenfarbe nur leer war. Konnte nicht herausfinden, wie man es in Grün ändert. Ich fühle mich albern, denn alles, was ich tun musste, war android: background = "" in die <android.support.v7.widget.Toolbar /> in der Layoutdatei zu setzen und das hat es geschafft! . Vielen Dank
Andrew Irwin
22

Wenn Sie einige Aktivitäten mit der Aktionsleiste kombinieren möchten und andere nicht, sollten Sie das Basisthema verwenden, für das die Aktionsleiste aktiviert ist, und dann ein Unterthema erstellen, das Sie für Aktivitäten verwenden, für die keine Aktionsleiste erforderlich ist

Sie können beispielsweise einen solchen Unterstil verwenden

             <style name="AppTheme.NoActionBar">
               <item name="windowActionBar">false</item>
               <item name="windowNoTitle">true</item>
            </style>

Während sich das Basisthema erweitert, sagen wir

    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

Verwenden Sie dann das Nicht-Aktionsleisten-Thema in der AndroidManifest-Datei innerhalb des Aktivitäts-Tags

   <activity
        android:name="com.example.NonActionBarActivity"
        android:theme="@style/AppTheme.NoActionBar"

Sie müssen dies auf jede einzelne Aktivität anwenden, für die keine Aktionsleiste erforderlich ist. Wenn für Ihr Projekt weniger Aktivitäten in der Aktionsleiste als für Nicht-Aktivitäten erforderlich sind, ist es besser, dies auf der Ebene des Basisthemas anzuwenden

Nasz Njoka Sr.
quelle
12

Ich hatte auch das gleiche Problem. Aber ich habe verwendet:

getSupportActionBar().hide();

Vor

setContentView(R.layout.activity_main);

Jetzt funktioniert es.

Und wir können andere Optionen in Style.xml ausprobieren .

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>
Thirumalvalavan
quelle
8

Fügen Sie dies in Ihre values ​​/ styles.xml ein

<style name="YourCustomTheme" parent="Theme.AppCompat.Light.NoActionBar">
</style>

<style name="AppBaseTheme" parent="YourCustomTheme">

</style>

<style name="AppTheme" parent="AppBaseTheme">

</style>

Fügen Sie den folgenden Code in Ihre Werte-v11 / styles.xml und values-v14 / styles.xml ein

<style name="AppBaseTheme" parent="YourCustomTheme">

</style>

Das ist es. Es wird klappen.

Prabhakaran
quelle
6

Du musst dich ändern

  <activity
        android:name=".YOUR ACTIVITY"
        android:theme="@style/AppTheme.NoActionBar" />
</application>`

Diese Zeilen im Manifest. Es wird perfekt für mich funktionieren.

S HemaNandhini
quelle
5

Gehen Sie zur 'style.xml' Ihres Projekts und setzen Sie windowActionBar auf false

<style name="AppCompatTheme" parent="@style/Theme.AppCompat.Light">
        <item name="android:windowActionBar">false</item>
</style>
Asim Roy
quelle
13
Wie helfen Sie anderen, wenn Ihre Antwort in Bezug auf meine Frage nicht korrekt ist
tyczj
Verwenden Sie anstelle von "Theme.AppCompat.Light" "Theme.AppCompat.Light.NoActionBar"
Christina
4

Fügen Sie diese beiden Zeilen in Ihr App-Design in style.xml ein: -

 <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>

    //Add this two line will fix your problem
    <item name="windowNoTitle">true</item>   <--1(this applies after 22.0.1 support library i think 
    <item name="windowActionBar">true</item> <--2

Kailash Dabhi
quelle
4

Ich hatte eine Symbolleiste in meiner XML hinzugefügt. Dann fügte ich in meiner Aktivität diese Aussage hinzu:

setSupportActionBar(toolbar);

Das zu entfernen hat bei mir funktioniert. Ich hoffe es hilft jemandem.

Harry .Naeem
quelle
Was ist, wenn ich es nicht entfernen möchte? Das heißt, es gibt Dinge, die die Symbolleiste verwenden.
Sreekanth Karumanaghat
Ich bin mir nicht sicher, aber ich denke, diese "setSupportActionBar (Symbolleiste)" zu entfernen; Die Symbolleiste bleibt dort.
Harry .Naeem
4

Wenn Sie den Fehler in dieser Zeile erhalten:

setSupportActionBar(...);

Sie müssen überprüfen, ob sich Ihre Aktivität auf ein Thema bezieht, das eine Symbolleiste enthält. Das AppTheme Ihrer Anwendung enthält möglicherweise bereits eine Symbolleiste, z

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

und Sie versuchen, eine zweite hinzuzufügen. Wenn Sie AppTheme Ihrer Anwendung verwenden möchten, müssen Sie das Thema aus Ihrer Aktivität in der Datei manifest.xml entfernen.

Zum Beispiel:

<activity
    android:name=".ui.activities.SettingsActivity"
    android:theme="@style/AppTheme1" /> --> remove this theme
Live-Liebe
quelle
4

Verwenden Sie dies in Ihrem Anwendungs-Tag im Manifest oder in Ihrem Aktivitäts-Tag.

android: theme = "@ style / AppTheme.NoActionBar"

Anirban
quelle
3

Wenn Sie AppcompactAktivität verwenden, verwenden Sie diese drei Zeilen in Ihrem Thema.

<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="android:windowActionBarOverlay">false</item>
Syed Hamza Hassan
quelle
2

Einfach ausgedrückt, können Sie Folgendes tun: -

if (android.os.Build.VERSION.SDK_INT >= 21) {
        Window window = getWindow();
        window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
        window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        window.setStatusBarColor(getResources().getColor(R.color.colorPrimaryDark));

    }
Yash Sachdeva
quelle
2

So habe ich das Problem gelöst. Fügen Sie den folgenden Code in IhrAndroidMainfest.xml

<activity android:name=".YourClass"
            android:theme="@style/Theme.AppCompat.Light.NoActionBar">
 </activity>
John Joe
quelle
1
perfekt! Danke für das Teilen.
Sandeep Yohans
1

Oder ändern Sie einfach den @ Style / AppTheme

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">

Das funktioniert bei mir!

Gaurav Bhagat
quelle
0
 <style name="AppCompatTheme" parent="@style/Theme.AppCompat.Light">
            <item name="android:windowActionBar">false</item>
    </style>

    Change this to NoActionBar 

        <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
            <!-- Customize your theme here. -->

        </style>

    This one worked for me
Chinecherem Tina
quelle
-1

Es gibt zwei einfache und schnelle Lösungen

Gehen Sie zu res -> values ​​-> styles

Sie können dieses Video auch ansehen, um es einfacher zu machen. KLICKEN SIE HIER

Lösung 1:

Sie können die Aktionsleiste durch Ersetzen entfernen

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

zu

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">

Lösung 2:

Fügen Sie einfach diese Zeilen hinzu

<item name="windowActionBar">false</item> <item name="windowNoTitle">true</item>

Jetzt sieht Ihre Stildatei so aus

`

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>

</style>

`

Muhammad Ali
quelle
-2

Ich habe es gelöst, indem ich diese Zeile entfernt habe:

android:theme="@style/Theme.MyCompatTheme"

von Aktivitätseigenschaften in der Manifest file

Flowra
quelle
-2

Legen Sie einfach parent="Theme.AppCompat.NoActionBar"in Ihrer style.xml Datei

Mögen - <style parent="Theme.AppCompat.NoActionBar" name="AppTheme.NoActionBar">

Md. Ibrahim
quelle