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?
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>
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>
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>
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.
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
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>
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.
Vous devez changer
<activity
Android:name=".YOUR ACTIVITY"
Android:theme="@style/AppTheme.NoActionBar" />
</application>`
ces lignes dans le manifeste.Il fonctionnera parfaitement pour moi.
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>
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.
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
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
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>
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));
}
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>
Utilisez-le dans votre balise d'application dans le manifeste ou dans votre balise d'activité.
Android: theme = "@ style/AppTheme.NoActionBar"