web-dev-qa-db-fra.com

Ne demandez pas de problème avec Window.FEATURE_ACTION_BAR

J'essaye de construire mon application mais sans succès .. J'ai essayé de plusieurs façons mais rien n'a fonctionné. L'exception est:

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.

Mon style.xml est:

<resources>

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

        <!-- theme customizations -->

        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="Android:windowNoTitle">true</item>
        <item name="Android:windowActionBar">false</item>

        <item name="Android:textColorPrimary">@color/ldrawer_color</item>
        <item name="actionMenuTextColor">@color/ldrawer_color</item>
        <item name="Android:textColorSecondary">@color/ldrawer_color</item>
    </style>

</resources>

et comme vous pouvez le voir, j'ai déclaré

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

Ceci est mon manifest.xml

 <application
        Android:allowBackup="true"
        tools:replace="Android:icon"
        Android:icon="@mipmap/ic_launcher"
        Android:label="@string/app_name"
        Android:theme="@style/AppTheme" >
        <activity
            Android:name=".MainActivity"
            Android:label="@string/app_name" >
            <intent-filter>
                <action Android:name="Android.intent.action.MAIN" />

                <category Android:name="Android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

et mon BaseActivity que j'utilise pour étendre d'autres activités

import Android.os.Bundle;
import Android.support.v7.app.AppCompatActivity;
import Android.support.v7.widget.Toolbar;

public abstract class BaseActivity extends AppCompatActivity {

    public Toolbar toolbar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(getLayoutResource());
        toolbar = (Toolbar) findViewById(R.id.toolbar);
        if (toolbar != null) {
            setSupportActionBar(toolbar);
            getSupportActionBar().setTitle(BaseActivity.this.getResources().getString(R.string.app_name));
            //getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        }
    }

    protected abstract int getLayoutResource();

    protected void setActionBarIcon(int iconRes) {
        toolbar.setNavigationIcon(iconRes);
    }

}

Je ne sais pas pourquoi il plante .. La seule façon de démarrer l'application sans planter est de définir le parent sur le style.xml dans Theme.AppCompat.Light.NoActionBar mais de cette façon la barre d'état est transparente et non colorée ...

19
End.Game

En utilisant Theme.AppCompat.Light indique Android que vous voulez que le framework vous fournisse un ActionBar. Cependant, vous créez votre propre ActionBar (un Toolbar), donc vous donnez le framework mélangé indique d'où vous voulez que l'ActionBar provienne.

Puisque vous utilisez une barre d'outils, vous voulez Theme.AppCompat.Light.NoActionBar.

L'étape suivante consiste à vous assurer que votre barre d'outils est correctement stylisée, ce qui semble être l'endroit où vous rencontrez des problèmes. Pour styliser votre barre d'outils comme une barre d'action en utilisant les couleurs que vous avez définies pour votre thème, vous devez fournir un thème comme ceci:

<Android.support.v7.widget.Toolbar
    Android:layout_height="wrap_content"
    Android:layout_width="match_parent"
    Android:minHeight="?attr/actionBarSize"
    app:theme="@style/ThemeOverlay.AppCompat.ActionBar" />

Voir la section "style" pour le widget de la barre d'outils sur this Android Developers pour plus d'informations.

47
Tanis.7x

En supposant que vous ayez ces lignes dans styles.xml:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

Ajoutez ces lignes supplémentaires après:

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

Ajoutez ensuite ceci à votre activité dans le manifeste:

<activity Android:name=".activity.YourActivity"
          Android:theme="@style/AppTheme.NoActionBar"><!-- ADD THIS LINE -->

C'était la meilleure solution pour moi après avoir vérifié les tutoriels et autres solutions

13
Alex Jolig

Dans mon cas, j'ai créé une nouvelle activité et j'ai oublié de définir son thème app: dans AndroidManifest.xml:

 <activity
        Android:name=".HistoryActivity"
        Android:label="History"
        Android:theme="@style/AppTheme.Primary"></activity>
4
Heisenberg

J'ai résolu le problème après avoir changé la valeur du "Android: thème" pour l'activité dans le manifeste de "@ style/AppTheme" en "@ style/AppTheme.NoActionBar":

<activity Android:name=".MyXXXActivity"
            ...                Android:theme="@style/AppTheme.NoActionBar" />
1
Fa Sche