102 votes

ActionBarCompat: java.lang.IllegalStateException: Vous devez utiliser un Thème.AppCompat

Je suis une RuntimeException sur Android 2.3.5, mais je suis en utilisant le Thème.AppCompat (res/values/themes.xml). C'est le téléphone: http://www.gsmarena.com/samsung_galaxy_y_s5360-4117.php

 <!-- res/values/themes.xml -->
 <?xml version="1.0" encoding="utf-8"?>
 <resources>

     <style name="Theme.Styled" parent="@style/Theme.AppCompat">
         <item name="actionBarStyle">@style/QueryActionBar</item>
         <item name="android:actionBarStyle">@style/QueryActionBar</item>
     </style>

     <style name="QueryActionBar" parent="@style/Widget.AppCompat.ActionBar">
         <item name="background">@color/blueback</item>
         <item name="android:background">@color/blueback</item>
         <item name="backgroundSplit">@color/blueback</item>
         <item name="android:backgroundSplit">@color/blueback</item>
     </style>

 </resources>

Voici le fichier pour les valeurs-v11.

 <!-- res/values-v11/themes.xml -->
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
    <style name="QueryTheme" parent="@android:style/Theme.Holo">
    <!-- Any customizations for your app running on devices with Theme.Holo here -->
    </style>
 </resources>

Voici le message d'erreur.

 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.txt2lrn.www/com.txt2lrn.www.LandingActivity}: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651)
 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
 at android.app.ActivityThread.access$1500(ActivityThread.java:117)
 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
 at android.os.Handler.dispatchMessage(Handler.java:99)
 at android.os.Looper.loop(Looper.java:130)
 at android.app.ActivityThread.main(ActivityThread.java:3687)
 at java.lang.reflect.Method.invokeNative(Native Method)
 at java.lang.reflect.Method.invoke(Method.java:507)
 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
 at dalvik.system.NativeStart.main(Native Method)
 Caused by: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
 at android.support.v7.app.ActionBarActivityDelegate.onCreate(ActionBarActivityDelegate.java:102)
 at android.support.v7.app.ActionBarActivity.onCreate(ActionBarActivity.java:98)
 at com.txt2lrn.www.LandingActivity.onCreate(LandingActivity.java:95)
 at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
 ... 11 more

Désolé les gars, je fais également de disposer d'android:thème="@style/Thème.Style" définis dans AndroidManifest.xml.

96voto

Nishad Points 701

Si vous étendez ActionBarActivity dans votre MainActivity, vous devrez changer le thème parent dans les valeurs-v11 aussi.
De sorte que le style.xml les valeurs-v11 sera -

 <!-- res/values-v11/themes.xml -->
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
    <style name="QueryTheme" parent="@style/Theme.AppCompat">
    <!-- Any customizations for your app running on devices with Theme.Holo here -->
    </style>
 </resources>

66voto

molokoka Points 548

Simplement ajouter ActionBar Compat votre activité ou votre application doit utiliser @style/Thème.AppCompat thème AndroidManifest.xml comme ceci:

   <activity
        ...
        android:theme="@style/Theme.AppCompat" />

Cela va ajouter actionbar dans l'activité(ou de toutes les activités si vous avez ajouté ce thème à la demande)


Mais généralement, vous avez besoin pour personnaliser votre actionbar. Pour ce faire, vous devez créer deux styles avec le Thème.AppCompat parent, par exemple, "@style/Thème.AppCompat.La lumière". Première sera pour l'api 11>= (versions d'android avec la version android actionbar), un second pour l'api de 7 à 10 (pas de construire dans l'actionbar).

Regardons d'abord le style. Il sera situé dans res/values-v11/styles.xml . Il ressemblera à ceci:

<style name="Theme.Styled" parent="@style/Theme.AppCompat.Light">
    <!-- Setting values in the android namespace affects API levels 11+ -->
    <item name="android:actionBarStyle">@style/Widget.Styled.ActionBar</item>
</style>

<style name="Widget.Styled.ActionBar" parent="@style/Widget.AppCompat.Light.ActionBar">
    <!-- Setting values in the android namespace affects API levels 11+ -->
    <item name="android:background">@drawable/ab_custom_solid_styled</item>
    <item name="android:backgroundStacked"
      >@drawable/ab_custom_stacked_solid_styled</item>
    <item name="android:backgroundSplit"
      >@drawable/ab_custom_bottom_solid_styled</item>
</style>

Et vous avez besoin pour avoir le même style pour l'api de 7 à 10. Il sera situé dans res/values/styles.xmlMAIS parce que l'api niveaux ne savons pas encore sur android original actionbar style, nous devons utiliser une, fournis par la bibliothèque de prise en charge. ActionBar Compat articles sont définis comme d'origine d'android, mais sans "android:" la partie à l'avant:

<style name="Theme.Styled" parent="@style/Theme.AppCompat.Light">
    <!-- Setting values in the default namespace affects API levels 7-11 -->
    <item name="actionBarStyle">@style/Widget.Styled.ActionBar</item>
</style>

<style name="Widget.Styled.ActionBar" parent="@style/Widget.AppCompat.Light.ActionBar">
    <!-- Setting values in the default namespace affects API levels 7-11 -->
    <item name="background">@drawable/ab_custom_solid_styled</item>
    <item name="backgroundStacked">@drawable/ab_custom_stacked_solid_styled</item>
    <item name="backgroundSplit">@drawable/ab_custom_bottom_solid_styled</item>
</style>

Prière d'indiquer que, même si l'api des niveaux supérieurs à 10 ont déjà actionbar vous devriez toujours utiliser AppCompat les styles. Si vous ne le faites pas, vous aurez cette erreur au lancement de Acitvity sur les appareils avec android 3.0 et supérieur:

java.lang.IllegalStateException: Vous devez utiliser un Thème.AppCompat thème (ou descendant) avec cette activité.

Voici le lien de cette article original http://android-developers.blogspot.com/2013/08/actionbarcompat-and-io-2013-app-source.html écrit par Chris Banes.

P. S. Désolé pour mon anglais

20voto

tyczj Points 14599

Vérifiez et assurez-vous que vous n'avez pas d'autre valeurs de dossier de références thème.de style et de ne pas utiliser AppCompat thème

ie values-v11 le dossier

16voto

Essayez ceci...

styles.xml

<resources>
 <style name="Theme.AppCompat.Light.NoActionBar" parent="@style/Theme.AppCompat.Light">
    <item name="android:windowNoTitle">true</item>
 </style>
</resources>

AndroidManifest.xml

   <activity
        android:name="com.example.Home"
        android:label="@string/app_name" 
        android:theme="@style/Theme.AppCompat.Light.NoActionBar"
        >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

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

11voto

Elenasys Points 23268

Votre Activity est d'étendre ActionBarActivity qui nécessite l' AppCompat.theme à être appliquée.

Changement de ActionBarActivity de Activity ou FragmentActivity, il permettra de résoudre le problème.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X