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?

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>

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>

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>

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.


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


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>

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.


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.


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>

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


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.


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

4

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

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


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>

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));

    }

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>

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!


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

-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>

`


-2

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

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

von Aktivitätseigenschaften in der Manifest file


-2

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

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.