web-dev-qa-db-fra.com

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

Essayer de passer par dessus mes affaires pour utiliser Toolbar au lieu de la barre d’action mais je reçois une erreur en 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 d'actionbar

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

et le thème est applicable aux activités dans mon manifeste

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

MainActivity étend GooglePlayServiceActivity donc j'ai aussi placé le thème là aussi

<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 pas non plus la fonctionnalité de fenêtre. des idées pourquoi je reçois toujours ceci?

463
tyczj

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 même, si vous utilisez la bibliothèque de support AppCompatActivity de 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>
771
Nadir Belhaj

Un autre moyen simple est de faire de votre thème un enfant de Theme.AppCompat.Light.NoActionBar comme suit:

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

Ajoutez une seule ligne Android:theme="@style/AppTheme.NoActionBar" à activity dans AndroidManifest et vous avez terminé.


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>
117
Volodymyr Kulyk

Pour utiliser la barre d’outils en tant que barre d’action, commencez par désactiver la barre d’action fournie par le décor.

Le moyen le plus simple est d’étendre votre thème de

Theme.AppCompat.NoActionBar

(ou sa variante légère).

Deuxièmement, créez une occurrence de barre d’outils, généralement via votre 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” />

Ensuite, dans votre activité ou fragment, configurez la barre d’outils pour qu’elle serve de 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.

52
V_J

Si vous souhaitez combiner certaines activités avec la barre d’action et d’autres pas, vous devez utiliser le thème de base pour activer la barre d’action, puis créer un sous-thème que vous utiliserez pour des activités qui ne nécessitent pas de barre d’action.

Par exemple, vous pouvez utiliser un style secondaire 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 appliquer cela à chaque activité individuelle qui n'a pas besoin de barre d'action. Si votre projet nécessite moins d'activités de barre d'action que non, il est préférable de l'appliquer au niveau du thème de base

20
Nasz Njoka Sr.

J'ai aussi fait face au 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>
10
Thirumalvalavan

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.

8
Prabhakaran

Vous devez changer

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

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

6
S HemaNandhini

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>
5
Asim Krishna Das

J'ai eu la barre d'outils ajoutée dans mon XML. Puis, dans mon activité, j'ajoutais cette déclaration:

setSupportActionBar(toolbar);

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

4
Harry .Naeem

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

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’application 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
live-love

Si vous utilisez Appcompact Activity, utilisez ces trois lignes dans votre thème.

<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="Android:windowActionBarOverlay">false</item>
3
Syed Hamza Hassan

En termes simples, vous pouvez effectuer les opérations suivantes: -

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

Voici comment j'ai résolu le problème. Ajoutez le code ci-dessous dans votre AndroidMainfest.xml

<activity Android:name=".YourClass"
            Android:theme="@style/Theme.AppCompat.Light.NoActionBar">
 </activity>
2
John Joe

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

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

0
Anirban