Cette activité a déjà une barre d'action fournie par le décor de fenêtre

497

J'essaie de déplacer mes trucs à utiliser à la Toolbarplace de la barre d'action mais je reçois toujours une erreur disant

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)

alors j'ai ajouté dans mon style pour que mon activité n'ait pas de barre d'action

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

et le thème s'applique aux activités de mon manifeste

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

MainActivity étend GooglePlayServiceActivity, donc j'ai également défini le thème là-bas

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

mais je reçois toujours l'erreur. Je ne demande également aucune fonctionnalité de fenêtre nulle part. des idées pourquoi je reçois toujours cela?

tyczj
la source

Réponses:

836

Je pense que vous développez pour Android Lollipop, mais incluez quand même cette ligne:

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

à votre déclaration de thème à l'intérieur de votre app/src/main/res/values/styles.xml.

De plus, si vous utilisez la AppCompatActivitybibliothèque de support de la version 22.1 ou supérieure, ajoutez cette ligne:

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

Votre déclaration de thème peut ressembler à ceci après tous ces ajouts:

<!-- 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
la source
18
n'est windowActionBarpas le même que android:windowActionBar?
tyczj
65
C'est le cas, mais le contenu AppCompat examine l'attribut d'espace de noms de l'application et non celui d'Android. Cela permet de spécifier l'attribut même sur les plates-formes qui ne l'avaient pas à l'origine. C'est ainsi qu'il permet le rétroportage de choses comme colorPrimary.
yarian
5
Quand j'ai ajouté cette ligne dans mes styles, le crash de l'application :(
rkmax
9
Ajoutez également <item name = "windowNoTitle"> true </item> Si vous utilisez AppCompatActivity après la bibliothèque de support 22.1 stackoverflow.com/a/29853299/1402525
Nick
4
N'oubliez pas d'ajouter: android: theme = "@ style / AppTheme" à la balise d'application dans le fichier manifeste.
live-love
202

Un autre moyen simple est de faire de votre thème un enfant Theme.AppCompat.Light.NoActionBarcomme ça:

<style name="NoActionBarTheme" parent="Theme.AppCompat.Light.NoActionBar">
     ...
</style>
MrEngineer13
la source
J'ai essayé cette méthode aussi mais j'ai quand même eu l'erreur. Cependant, cela aurait pu être avant que je mette le thème à ma place GooglePlayServiceActivity, je ne me souviens pas
tyczj
1
Oui, c'est ce que j'utilise. Assurez-vous simplement que l'activité utilise ce thème dans le manifeste
MrEngineer13
6
Je trouve cette solution plus élégante que celle de @Nadir Belhaj, bien que les deux soient correctes.
voghDev
Je pense que c'est la meilleure réponse, en utilisant l'attribut XML en ligne (windowActionBar = false) n'a pas fonctionné - j'ai la même erreur que @tyczj
Booger
Dans ce cas, vous ne pouvez pas utiliser Theme.AppCompat.Light.DarkActionBar qui est en fait un parent utile.
f470071
125

Ajouter une seule ligne android:theme="@style/AppTheme.NoActionBar"à activityen AndroidManifestet vous avez fait.


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
la source
52

Pour utiliser la barre d'outils comme barre d'action, désactivez d'abord la barre d'action fournie par le décor.

La façon la plus simple est de faire étendre votre thème

Theme.AppCompat.NoActionBar

(ou sa variante légère).

Deuxièmement, créez une instance de la barre d'outils, généralement via votre XML de mise en page:

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

Ensuite, dans votre activité ou fragment, définissez la barre d'outils pour agir comme votre barre d'action:

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

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

Ce code a fonctionné pour moi.

V_J
la source
1
Merci! J'ai oublié d'ajouter <android.support.v7.widget.Toolbarau XML.
CoolMind
1
Je ne pouvais pas comprendre pourquoi la couleur de ma barre d'outils était juste vide. Impossible de comprendre comment le changer en vert. Je me sens stupide car tout ce que j'avais à faire était de mettre android: background = "" dans le <android.support.v7.widget.Toolbar /> dans le fichier de mise en page et cela l'a fait! . Merci
Andrew Irwin
22

Si vous souhaitez combiner certaines activités avec la barre d'action et d'autres non, vous devez utiliser le thème de base avec la barre d'action activée, puis créer un sous-thème que vous allez utiliser sur des activités qui ne nécessitent pas de barre d'action.

Par exemple, vous pouvez utiliser un sous-style comme celui-ci

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

Alors que le thème de base s'étend, disons

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

puis utilisez le thème non actionbar dans le fichier AndroidManifest dans la balise d'activité, par exemple

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

vous devez l'appliquer à chaque activité individuelle qui n'a pas besoin de la barre d'action, donc si votre projet nécessite moins d'activités que la barre d'actions, il est préférable de l'appliquer au niveau du thème de base

Nasz Njoka Sr.
la source
12

J'ai également rencontré le même problème. Mais j'ai utilisé:

getSupportActionBar().hide();

avant

setContentView(R.layout.activity_main);

Maintenant ça marche.

Et nous pouvons essayer une autre option dans 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>
Thirumalvalavan
la source
8

Ajoutez ceci dans vos valeurs / styles.xml

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

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

</style>

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

</style>

Et ajoutez le code suivant dans vos valeurs-v11 / styles.xml et values-v14 / styles.xml

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

</style>

C'est ça. Ça va marcher.

Prabhakaran
la source
6

Vous devez changer

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

ces lignes dans le manifeste. Cela fonctionnera parfaitement pour moi.

S HemaNandhini
la source
5

Accédez au 'style.xml' de votre projet et définissez windowActionBar sur false

<style name="AppCompatTheme" parent="@style/Theme.AppCompat.Light">
        <item name="android:windowActionBar">false</item>
</style>
Asim Roy
la source
13
Comment aidez-vous les autres lorsque votre réponse n'est pas correcte en ce qui concerne ma question
tyczj
Au lieu d'utiliser "Theme.AppCompat.Light", utilisez "Theme.AppCompat.Light.NoActionBar"
Christina
4

Ajoutez ces deux lignes dans le thème de votre application situé dans 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

Kailash Dabhi
la source
4

J'ai ajouté une barre d'outils dans mon xml. Ensuite, dans mon activité, j'ajoutais cette déclaration:

setSupportActionBar(toolbar);

Supprimer cela a fonctionné pour moi. J'espère que ça aide quelqu'un.

Harry .Naeem
la source
Et si je ne veux pas le supprimer? C'est qu'il y a des choses qui utilisent la barre d'outils.
Sreekanth Karumanaghat
Je ne suis pas sûr à ce sujet, mais je pense que la suppression de ce "setSupportActionBar (barre d'outils);" la barre d'outils y restera.
Harry .Naeem
4

Si vous obtenez l'erreur sur cette ligne:

setSupportActionBar(...);

Vous devez vérifier si votre activité fait référence à un thème contenant une barre d'outils. L'AppTheme de votre application peut déjà contenir une barre d'outils, telle que

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

et vous essayez d'en ajouter un deuxième. Si vous souhaitez utiliser AppTheme de votre application, vous devez supprimer le thème de votre activité, dans le fichier manifest.xml.

Par exemple:

<activity
    android:name=".ui.activities.SettingsActivity"
    android:theme="@style/AppTheme1" /> --> remove this theme
l'amour en direct
la source
4

Utilisez-le dans votre balise d'application dans le manifeste ou dans votre balise d'activité.

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

Anirban
la source
3

Si vous utilisez l' Appcompactactivité, utilisez ces trois lignes dans votre thème.

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

Autrement dit, vous pouvez faire ce qui suit: -

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
la source
2

C'est ainsi que j'ai résolu le problème. Ajoutez le code ci-dessous dans votreAndroidMainfest.xml

<activity android:name=".YourClass"
            android:theme="@style/Theme.AppCompat.Light.NoActionBar">
 </activity>
John Joe
la source
1
parfait! Merci d'avoir partagé.
Sandeep Yohans
1

Ou changez simplement le @ Style / AppTheme

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

Ça marche pour moi!

Gaurav Bhagat
la source
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
la source
-1

Il existe deux solutions simples et rapides

allez dans res -> valeurs -> styles

VOUS pouvez aussi regarder cette vidéo pour plus de facilité CLIQUEZ ICI

Solution 1:

Vous pouvez supprimer la barre d'actions en remplaçant

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

à

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

Solution2:

Ajoutez simplement ces lignes

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

Alors maintenant, votre fichier de style ressemble à ceci

"

<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
la source
-2

Je l'ai résolu en supprimant cette ligne:

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

des propriétés d'activité dans le Manifest file

Flowra
la source
-2

Mettez simplement parent="Theme.AppCompat.NoActionBar"votre fichier style.xml

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

Md. Ibrahim
la source