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?

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>

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>

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>

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.


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


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>

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.


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.


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>

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


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.


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

4

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

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


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>

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

    }

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>

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!


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

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>

"


-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


-2

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

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.