Questa attività ha già una barra delle azioni fornita dalla decorazione della finestra


497

Sto cercando di spostare le mie cose da usare al Toolbarposto della barra delle azioni, ma continuo a ricevere un messaggio di errore

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)

quindi ho aggiunto nel mio stile che la mia attività non avesse barra delle azioni

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

e il tema si applica alle attività nel mio manifest

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

MainActivity estende GooglePlayServiceActivity quindi ho impostato anche il tema lì

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

ma ho ancora l'errore. Inoltre, non richiedo funzionalità finestra da nessuna parte. qualche idea sul perché ottengo ancora questo?

Risposte:


836

Penso che tu stia sviluppando per Android Lollipop, ma comunque includi questa linea:

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

alla tua dichiarazione a tema all'interno della tua app/src/main/res/values/styles.xml.

Inoltre, se stai utilizzando la AppCompatActivitylibreria di supporto della versione 22.1 o successiva, aggiungi questa riga:

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

La dichiarazione del tema potrebbe apparire così dopo tutte queste aggiunte:

<!-- 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
windowActionBarnon è lo stesso di android:windowActionBar?
tyczj,

65
Lo è, ma le cose di AppCompat guardano l'attributo dello spazio dei nomi dell'app non quello di Android. Ciò consente di specificare l'attributo anche nelle piattaforme che inizialmente non lo avevano. È così che consente il backport di cose come colorPrimary.
yarian,

5
Quando ho aggiunto quella linea nei miei stili, l'app si è
bloccata

9
Anche aggiungere <item name = "windowNoTitle"> true </ item> Se stai usando AppCompatActivity dopo 22.1 libreria di supporto stackoverflow.com/a/29853299/1402525
Nick

4
Non dimenticare di aggiungere: android: theme = "@ style / AppTheme" al tag dell'applicazione nel file manifest.
live-love

202

Un altro modo semplice è rendere il tuo tema un bambino Theme.AppCompat.Light.NoActionBarsimile:

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

Ho provato anche questo metodo ma ho ancora riscontrato l'errore. Tuttavia, ciò non avrebbe potuto essere prima di impostare il tema sul mio GooglePlayServiceActivity, non ricordo
tyczj,

1
Sì, questo è quello che ho usato. Assicurati solo che l'attività utilizzi questo tema nel manifest
MrEngineer13

6
Trovo questa soluzione più elegante di quella di @Nadir Belhaj, sebbene entrambe siano corrette.
voghDev,

Penso che questa sia la risposta migliore, usando l'attributo XML inline (windowActionBar = false) non ha funzionato - Ho avuto lo stesso errore di @tyczj
Booger

In tal caso non puoi usare Theme.AppCompat.Light.DarkActionBar che in realtà è un genitore utile.
f470071

125

Aggiungi una riga android:theme="@style/AppTheme.NoActionBar"a activityin AndroidManifeste il gioco è fatto.


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

Per utilizzare la barra degli strumenti come barra delle azioni, disabilitare innanzitutto la barra delle azioni fornita dalla decorazione.

Il modo più semplice è estendere il tema

Theme.AppCompat.NoActionBar

(o la sua variante leggera).

In secondo luogo, creare un'istanza di Toolbar, di solito tramite l'XML di layout:

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

Quindi, nella tua attività o frammento, imposta la barra degli strumenti in modo che funga da barra delle azioni:

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

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

Questo codice ha funzionato per me.


1
Grazie! Ho dimenticato di aggiungere <android.support.v7.widget.Toolbara XML.
CoolMind,

1
Non riuscivo a capire perché il colore della mia barra degli strumenti fosse solo vuoto. Non riesco a capire come cambiarlo in verde. Mi sento sciocco perché tutto quello che dovevo fare era inserire android: background = "" all'interno di <android.support.v7.widget.Toolbar /> nel file di layout e così è stato! . Grazie
Andrew Irwin,

22

Se si desidera combinare alcune attività con la barra delle azioni e altre no, è necessario utilizzare il tema di base avere la barra delle azioni abilitata e quindi creare un sottotema che verrà utilizzato nelle attività che non richiedono la barra delle azioni

Ad esempio puoi usare uno stile secondario come questo

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

Mentre il tema di base si estende dire

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

e quindi usa il tema non actionbar nel file AndroidManifest all'interno del tag attività dire

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

devi applicarlo a ogni singola attività che non ha bisogno della barra delle azioni, quindi se il tuo progetto richiede meno attività della barra delle azioni rispetto a non, allora è meglio applicarlo a livello del tema di base


12

Ho anche affrontato lo stesso problema. Ma ho usato:

getSupportActionBar().hide();

prima

setContentView(R.layout.activity_main);

Ora funziona.

E possiamo provare altre opzioni in Style.xml ,

<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

Aggiungi questo nei tuoi valori / styles.xml

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

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

</style>

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

</style>

E aggiungi il seguente codice in valori-v11 / styles.xml e valori-v14 / styles.xml

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

</style>

Questo è tutto. Funzionerà.


6

Devi cambiare

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

queste linee nel manifest. Funzionerà perfettamente per me.


5

Vai su "style.xml" del tuo progetto e imposta windowActionBar su false

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

13
In che modo stai aiutando gli altri quando la tua risposta non è corretta nei riguardi della mia domanda
tyczj,

Invece di usare "Theme.AppCompat.Light", usa "Theme.AppCompat.Light.NoActionBar"
Christina,

4

Aggiungi queste due righe nel tema dell'app che si trova in style.xml: -

 <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

Ho aggiunto la barra degli strumenti nel mio XML. Quindi nella mia attività stavo aggiungendo questa affermazione:

setSupportActionBar(toolbar);

Rimuovere questo ha funzionato per me. Spero che aiuti qualcuno.


Cosa succede se non desidero rimuoverlo? Cioè ci sono cose che usano la barra degli strumenti.
Sreekanth Karumanaghat,

Non ne sono sicuro, ma penso di rimuovere questo "setSupportActionBar (barra degli strumenti);" la barra degli strumenti rimarrà lì.
Harry. Neem

4

Se ricevi l'errore su questa riga:

setSupportActionBar(...);

Devi verificare se la tua attività si riferisce a un tema che contiene una barra degli strumenti. AppTheme dell'applicazione potrebbe già contenere una barra degli strumenti, ad esempio

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

e stai provando ad aggiungerne un secondo. Se si desidera utilizzare AppTheme dell'applicazione, è necessario rimuovere il tema dall'attività nel file manifest.xml.

Per esempio:

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

4

Utilizzare questo all'interno del tag dell'applicazione in manifest o all'interno del tag Activity.

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


3

Se stai usando AppcompactAttività usa queste tre righe nel tuo tema.

<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="android:windowActionBarOverlay">false</item>

2

In poche parole, è possibile effettuare le seguenti operazioni: -

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

Ecco come ho risolto il problema. Aggiungi sotto il codice nel tuoAndroidMainfest.xml

<activity android:name=".YourClass"
            android:theme="@style/Theme.AppCompat.Light.NoActionBar">
 </activity>

1
Perfetto! Grazie per la condivisione.
Sandeep Yohans,

1

Oppure cambia semplicemente @ Style / AppTheme

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

Questo funziona per me!


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

Esistono due soluzioni semplici e veloci

vai a res -> valori -> stili

Puoi anche guardare questo video per una maggiore facilità FARE CLIC QUI

Soluzione 1:

È possibile rimuovere la barra delle azioni sostituendola

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

per

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

Solution2:

Aggiungi semplicemente queste righe

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

Quindi ora il tuo file di stile è simile a questo

`

<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

L'ho risolto rimuovendo questa riga:

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

dalle proprietà dell'attività nel Manifest file


-2

Basta mettere parent="Theme.AppCompat.NoActionBar"nel vostro file style.xml

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.