Vous devez utiliser un thème Theme.AppCompat (ou descendant) avec cette activité

1005

Android Studio 0.4.5

Documentation Android pour la création de boîtes de dialogue personnalisées: http://developer.android.com/guide/topics/ui/dialogs.html

Si vous souhaitez une boîte de dialogue personnalisée, vous pouvez à la place afficher une activité en tant que boîte de dialogue au lieu d'utiliser les API de boîte de dialogue. Créez simplement une activité et définissez son thème sur Theme.Holo.Dialog dans l' <activity>élément manifeste:

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

Cependant, lorsque j'ai essayé cela, j'obtiens l'exception suivante:

java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity

Je soutiens ce qui suit et je ne peux pas utiliser quelque chose de plus de 10 pour le min:

minSdkVersion 10
targetSdkVersion 19

Dans mes styles, j'ai les éléments suivants:

<!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

Et dans mon manifeste, j'ai ceci pour l'activité:

 <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:theme="@android:style/Theme.Holo.Light.Dialog"
            android:name="com.ssd.register.Dialog_update"
            android:label="@string/title_activity_dialog_update" >
        </activity>

La création de la boîte de dialogue comme celle-ci était quelque chose que j'allais faire, car j'avais déjà terminé la mise en page.

Quelqu'un peut-il me dire comment contourner ce problème?

ant2009
la source
2
@Raghunandan, je suis nouveau dans ce domaine, mais en regardant mes styles, j'ai les éléments suivants: <style name = "AppTheme" parent = "Theme.AppCompat.Light.DarkActionBar"> Et j'ai les importations suivantes: import android.support.v7 .app.ActionBarActivity; import android.support.v7.app.ActionBar; import android.support.v4.app.Fragment; Mais je ne sais pas ce que tout cela signifie.
ant2009
10
Vous utilisez AppCompatce qui est de la bibliothèque de support pour prendre en charge les barres d'actions en dessous du niveau 11 de l'API. Utilisez-le simplement android:theme="@style/AppTheme" >pour l'activité du manifeste
Raghunandan
2
@ ant2009, pour confirmer ce que @Raghunandan a dit: dans votre AndroidManifest.xml, le thème que vous spécifiez pour votre activité est prioritaire sur le thème que vous spécifiez pour votre application. Supprimez la android:themeligne de la <activity>balise.
cryptochronoconolite du
3
Cela supprimera l'erreur mais ne l'amènera pas là où il veut être, ce qui est une activité avec un thème de dialogue. La règle générale est que si vous voulez que votre activité ait une barre d'actions, elle doit avoir le thème AppCompat et le code java doit étendre ActionBarActivity. Si vous avez une activité qui n'a pas besoin d'une barre d'action (comme une activité sur le thème de la boîte de dialogue), vous pouvez lui appliquer n'importe quel thème mais le code java doit étendre une ancienne activité.
Bobbake4
1
Je pense que le seul problème dans ce cas est le contexte que vous fournissez pour Dialog constractor. Voir ma réponse. stackoverflow.com/a/51574281/232727
Vitaliy A

Réponses:

1124

La raison pour laquelle vous rencontrez ce problème est que l'activité à laquelle vous essayez d'appliquer le thème de la boîte de dialogue s'étend, ActionBarActivityce qui nécessite que le AppCompatthème soit appliqué.

Mise à jour : l'extension AppCompatActivityaurait également ce problème

Dans ce cas, changer l'héritage Java à partir ActionBarActivityde Activityet laisser le thème de dialogue dans le manifeste qu'il est, une non Theme.AppCompatvaleur


La règle générale est que si vous voulez que votre code prenne en charge les anciennes versions d'Android, il devrait avoir le AppCompatthème et le code java devrait s'étendre AppCompatActivity. Si vous avez * une activité qui n'a pas besoin de ce support, telle que vous ne vous souciez que des dernières versions et fonctionnalités d'Android, vous pouvez lui appliquer n'importe quel thème mais le code java doit s'étendre tout simplement Activity.


REMARQUE: lorsque vous passez de AppCompatActivity(ou d'une sous-classe ActionBarActivity) à Activity, vous devez également modifier les différents appels avec "support" en l'appel correspondant sans "support". Donc, au lieu de getSupportFragmentManager, appelez getFragmentManager.

Bobbake4
la source
6
op utilise appcompat, auquel cas il doit étendre ActionBarActivityce qui est indiqué dans ses déclarations d'importation du commentaire sous la question.
Raghunandan
2
@Bursos Si vous parlez lorsque vous créez un nouveau projet dans Android Studio, je suppose que c'est un bogue dans la configuration standard.
Bobbake4
2
@ Bobbake4, j'ai le même problème, et cette solution est impossible à travailler pour moi. Le fait est que je ne peux pas étendre Activity, car j'ai un tas de classes (projet entier) qui relaient sur ActionBarActivity. Existe-t-il une autre solution au problème? Thx
5er
6
@ 5er Si votre Java utilise ActionBarActivity, le thème doit étendre Theme.AppCompat. Il existe une poignée de thèmes intégrés qui étendent Theme.AppCompat ou vous pouvez l'étendre vous-même et le modifier. Sans supprimer le parent ActionBarActivity, vous ne pouvez pas contourner l'utilisation de Theme.AppCompat.
Bobbake4
26
Dans le style <style name = "AppTheme" parent = "Theme.AppCompat.Light.DarkActionBar"> cela a résolu mon problème. :)
Harmeet Singh
546

Tout ce que vous devez faire est d'ajouter android:theme="@style/Theme.AppCompat.Light"à votre balise d'application dans le AndroidManifest.xmlfichier.

poussant
la source
2
Dans le code, ant2009 a AppTheme défini comme application, qui s'étend d'un descendant de Theme.AppCompat. Cela devrait fonctionner. J'ai eu le même problème après la mise à niveau vers 5.0 sur mon appareil et j'ai fini par définir @ style / Theme.AppCompat.Light comme thème de mon activité. Quelque chose ne va pas ici ...
speedynomads
36
Ce n'est pas une réponse valide pour Android Studio, bien que cela fonctionne dans certains cas comme une solution rapide lorsque l'on contourne les fichiers styles.xml. Dans Android Studio, la bonne façon de définir le thème est de les définir dans des fichiers styles.xml, puis le fichier de manifeste Android s'y référera simplement et les sélectionnera en fonction de la version d'Android que vous exécutez sur votre appareil. Habituellement, il est défini sur android: theme = "@ style / AppTheme" et cet AppTheme fait référence à <style name = "Theme.AppTheme" parent = "Theme.AppCompat.Light"> dans styles.xml
zeeshan
5
Cela n'a pas vraiment fonctionné pour moi car mes barres de titre ont disparu lorsque j'ai utilisé autre chose que de l'holo ...
AndyD273
1
A également abordé ce problème en utilisant le SnackBar. Cela a résolu mon problème.
travaillé le
2
@Martin si vous êtes comme moi, vous avez oublié d'ajouter le même nom de style dans le fichier général styles.xml que vous avez mis dans le fichier (V21) styles.xml (sans les propriétés spécifiques à V21). Si vous déclarez un style dans le dossier V21 et que votre appareil a une version ci-dessous. Il ne peut pas le trouver, donc une exception est déclenchée.
letroll
275

Copie de la réponse de @MarkKeen dans les commentaires ci-dessus car j'ai eu le même problème.

J'ai eu l'erreur indiquée en haut du message et je me suis produite après avoir ajouté une boîte de dialogue d'alerte. J'ai toutes les informations de style pertinentes dans le manifeste. Mon problème a été résolu en modifiant une référence de contexte dans le générateur d'alertes - j'ai changé:

new android.support.v7.app.AlertDialog.Builder(getApplicationContext())

à:

new android.support.v7.app.AlertDialog.Builder(this)

Et plus de problèmes.

AK
la source
5
Cela m'est arrivé aussi. J'essayais juste et ta réponse a vraiment fonctionné! Quelle est la logique pour que cela fonctionne? Je n'ai vraiment pas compris.
kirtan403
6
Ou, si vous construisez votre AlertDialog dans un fragment, plutôt que directement dans une activité, utilisez getActivity()plutôt que thiscomme suggéré ci-dessus et le problème est résolu. Quant à savoir pourquoi, je ne peux que supposer que l'ancien code AlertDialog.Builder (xxx) voulait soit un type différent transmis, soit était tout simplement moins pointilleux sur ce qui était passé, tandis que le Builder actuel () veut vraiment, vraiment, une activité. Étant donné que Google a choisi de masquer (supprimer?) La documentation de l'ancien code, probablement dans le but d'encourager l'utilisation de la version v7.app, je ne connais aucun moyen de le dire avec certitude.
Anne Gunn
A fait le contraire de ce qui est suggéré. Et cela a fonctionné: P. Merci!
Harisewak
1
Cela résout le programme pour moi, vous utiliseriez également getContext()au lieu de thissi vous êtes dans un ArrayAdapter ou une classe d'adaptateur similaire.
Ibrahim.H
1
C'est la vraie solution que je rencontre. CONSEIL: Veuillez mentionner la différence dans getApplicationContext () et ce dans ce but.
prazeev
109

min sdk is 10. ActionBaris available from api level 11. Donc, pour 10, vous utiliseriez à AppCompatpartir de la bibliothèque de support pour laquelle vous devez utiliser Theme.AppCompatou descendante de la même.

Utilisation

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

Ou si vous ne voulez pas de barre d'action en haut

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

Plus d'informations @

http://developer.android.com/guide/topics/ui/actionbar.html

Éditer:

J'ai peut-être mal lu le post op.

Semble op veut un dialogue avec un thème d'activité. Donc, comme déjà suggéré par Bobbake4 étendre Activityau lieu deActionBarActivity .

Consultez également les attributs @ Dialog dans le lien ci-dessous

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.4_r1/frameworks/base/core/res/res/values/themes.xml/

Raghunandan
la source
Merci pour la suggestion. J'ai déjà essayé ça en fait. Et j'ai eu le même problème. Mon fichier de styles ressemble à ceci: <style name = "AppTheme" parent = "Theme.AppCompat">
ant2009
@ ant2009 vous ne le ferez pas. Utilisez un thème de la bibliothèque de support AppCompat pour votre activité
Raghunandan
Je ne sais pas si j'ajoute ce thème correctement. Mais voulez-vous dire l'ajout de l'instruction d'importation suivante? import android.support.v7.appcompat. *; Cependant, j'ai essayé et peut-être que je me trompe car je me suis retrouvé avec la même exception.
ant2009
@ ant2009, vous pouvez avoir une boîte de dialogue personnalisée. Mais voulez-vous une boîte de dialogue plein écran?
Raghunandan
Je ne voulais pas l'avoir en plein écran. Juste une boîte de dialogue. Cependant, le problème est résolu maintenant. Bobbake4 a bien compris. Merci pour vos efforts de toute façon, vous avez donné des conseils utiles. Cependant, je suis toujours confus avec toute cette bibliothèque de support et AppCompat.
ant2009
99

Si vous utilisez le contexte d'application, comme ceci:

final AlertDialog.Builder builder = new AlertDialog.Builder(getApplicationContext());

changez-le en un contexte d'activité comme celui-ci:

final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
Darush
la source
Même chose si vous utilisez LayoutInflater.from (<contexte d'application>), assurez-vous d'utiliser le contexte d'activité ou le LayoutInflater fourni afin qu'il hérite du bon thème.
lbarbosa
1
Votre solution m'a aidé dans mon cas. Pouvez-vous expliquer quelle différence entre getApplicationContext () et MainActivity.this?
kostyabakay
se référer à ce lien: stackoverflow.com/questions/22966601/…
Darush
9
vous avez besoin d'une activité, pas d'un contexte, pour afficher les dialogues
behelit
cette solution le résout
Mohamed Amin
45

Je rencontrais ce problème même si mon thème était un AppCompatthème et mon activité était un AppCompatActivity(ou Activity, comme suggéré dans les réponses des autres). J'ai donc nettoyé, reconstruit et relancé le projet.

( Build -> Clean Project; Build -> Rebuild Project; Run -> Run )

Cela peut sembler stupide, mais maintenant cela fonctionne très bien !

J'espère juste que ça aide!

Geraldo Neto
la source
1
Avait exactement le même message après avoir ajouté DialogFragment à l'activité AppCompat. File, Invalidate Caches / Restart a corrigé cela à la rigueur.
halxinate
2
J'ai essayé presque toutes les réponses dans ce fil. mais seule cette réponse apparemment "stupide" fonctionne. Merci!
Dika
27

C'est ce qui l'a corrigé pour moi: au lieu de spécifier le thème dans le manifeste, je l'ai défini onCreatepour chaque activité qui s'étend ActionBarActivity:

@Override
protected void onCreate(Bundle savedInstanceState) {
    setTheme(R.style.MyAppTheme);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.my_activity_layout);
...
}

Voici MyAppThemeun descendant de Theme.AppCompat, et est défini en xml. Notez que le thème doit être défini avant super.onCreateetsetContentView .

k29
la source
1
Robolectric lance une exception NullPointerException sur la ligne setTheme lors de la tentative de chargement de la ressource. Une idée pourquoi?
Rhys Davis
@RhysDavis Difficile à dire sans trace de pile, mais peut-être qu'il veut d'abord définir setContentView? Dans ce cas, ce correctif ne fonctionnera pas pour vous.
k29
19

allez dans vos styles et mettez le parent

parent="Theme.AppCompat"

au lieu de

parent="@android:style/Theme.Holo.Light"
Yamen Nassif
la source
Pourquoi pouvons-nous le faire avec une activité standard. Android n'a-t-il pas mis de barres d'action sur les activités standard avec ICS ou Honecomb? Faut-il toujours utiliser ActionBarActivity si nous définissons notre cible minimale sur SDK ICS?
Andrew S
comment voir quel thème utiliser avec le type ou la fonctionnalité que nous utilisons, car lorsque nous importons, nous avons tous les types de thèmes disponibles
blackHawk
17

Modifiez le thème de l'activité souhaitée. Cela fonctionne pour moi:

<activity
            android:name="HomeActivity"
            android:screenOrientation="landscape"
            android:theme="@style/Theme.AppCompat.Light"
            android:windowSoftInputMode="stateHidden" />
sharma_kunal
la source
16

Dans mon cas, je n'ai pas de fichier values-v21 dans mon répertoire res. Ensuite, je l'ai créé et y ai ajouté les codes suivants:

  <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>
Ali Gürelli
la source
J'exécutais mon projet sur des appareils Oreo + et seulement cela a fonctionné pour moi.
Nishant Soni
14

J'ai eu un tel crash sur les appareils Samsung même si l'activité utilisait Theme.AppCompat . La cause première était liée à des optimisations étranges du côté de Samsung:

- if one activity of your app has theme not inherited from Theme.AppCompat
- and it has also `android:launchMode="singleTask"`
- then all the activities that are launched from it will share the same Theme

Ma solution venait de supprimer android:launchMode="singleTask"

goRGon
la source
2
J'ai également rencontré cela, je n'ai pas validé le correctif et je ne peux pas reproduire l'erreur .. mais je vois cette erreur dans la nature sur les appareils Samsung uniquement. la plupart semblent également être enracinés, fwiw
danb
L'erreur a été indiquée en haut du message et s'est produite après avoir ajouté une boîte de dialogue d'alerte. J'ai toutes les informations de style pertinentes dans le manifeste. Mon problème a été résolu en modifiant une référence de contexte dans le générateur d'alerte - j'ai changé: new android.support.v7.app.AlertDialog.Builder (getApplicationContext ()) en: new android.support.v7.app.AlertDialog.Builder (this ) et plus de problèmes ...
Mark Keen
Avez-vous plus de détails ou de liens vers Samsung sur cette optimisation? Toutes les activités doivent-elles alors implémenter Theme.AppCompat ou il peut y avoir des activités sans thème?
AAverin
13

Si vous devez étendre ActionBarActivity dont vous avez besoin sur votre style.xml:

<!-- Base application theme. -->
<style name="AppTheme" parent="AppTheme.Base"/>

<style name="AppTheme.Base" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->

Si vous définissez comme thème principal de votre application Android: Theme.Material.Light au lieu d' AppTheme.Base, vous obtiendrez une erreur «IllegalStateException: vous devez utiliser un thème Theme.AppCompat (ou un descendant) avec cette activité».

JonasOliveira
la source
13

Faites juste

new AlertDialog.Builder(this)

Au lieu de

new AlertDialog.Builder(getApplicationContext())
Ali Akram
la source
Solution de travail! 30 minutes pour découvrir cette réponse. Pourquoi j'utilise le nouveau AlertDialog.Builder (getApplicationContext ())?
Erich García
Il sera utile d'expliquer quel type thisdevrait être.
Blago
12

J'ai eu le même problème, mais il a été résolu lorsque j'ai mis cela sur le manifeste: android: theme = "@ style / Theme.AppCompat.

    <application
        android:allowBackup="true"
        android:icon="@drawable/icon"
        android:label="@string/app_name_test"
        android:supportsRtl="true"
        android:theme="@style/Theme.AppCompat">

        ...    

    </application>
Marc Baduq
la source
10

Dans mon cas, un tel problème est apparu lorsque j'ai essayé de montrer Dialog. Le problème était dans le contexte, j'ai utilisé getBaseContext () qui théoriquement devrait renvoyer le contexte d'activité, mais semble que ce n'est pas le cas, ou il retourne le contexte avant tout thème appliqué.

Je viens donc de remplacer getBaseContexts () par " this ", et maintenant cela fonctionne comme prévu.

        Dialog.showAlert(this, title, message,....);
Vitaliy A
la source
je passais getApplicaitonContext (), mais le vôtre a fait l'affaire
Jeeva
9

J'ai eu une activité avec le thème <android:theme="@android:style/Theme.Dialog">utilisé pour afficher la boîte de dialogue dans mon application et j'ai eu le même problème

j'ai résolu cette erreur en changeant le code d'activité comme ci-dessous:

@Override
protected void onCreate(Bundle savedInstanceState) {
    setTheme(R.style.Theme_AppCompat_Dialog); //this line i added
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_dialog);
}
Elyas Nategh
la source
2
C'était une réponse simple qui a fonctionné pour moi sans toute la complexité et la non-réponse de la réponse acceptée.
Cory Trese
8

pour moi était une solution pour utiliser ContextThemeWrapper:

private FloatingActionButton getFAB() {
Context context = new android.support.v7.view.ContextThemeWrapper(getContext(), R.style.AppTheme);
FloatingActionButton fab = new FloatingActionButton(context);
return fab;}

depuis Android - Comment créer FAB par programmation?

Peter
la source
8

Assurez-vous que vous utilisez un contexte d'activité lors de la création d'une nouvelle boîte de dialogue d'alerte et non un contexte d'application ou de base.

Shivam Dawar
la source
7

J'ai également eu ce problème et ce que j'ai fait pour le résoudre, ET toujours utiliser le thème Holo était de prendre les mesures suivantes:

j'ai d'abord remplacé cette importation:

import android.support.v7.app.AppCompatActivity;

avec celui-ci:

import android.app.Activity;

puis changé mon extension de:

public class MyClass extends AppCompatActivity {//...

pour ça:

public class MyClass extends Activity {//...

Et a également dû modifier cette importation:

import android.support.v7.app.AlertDialog;

à cette importation:

import android.app.AlertDialog;

puis vous pouvez utiliser votre balise de thème dans le manifeste au niveau de l'activité:

android:theme="@android:style/Theme.Holo.Dialog" />

et enfin, (sauf si vous avez d'autres classes dans votre projet qui doivent utiliser v7 appCompat), vous pouvez soit nettoyer et reconstruire votre projet ou supprimer cette entrée dans le fichier de construction gradle au niveau de l'application:

compile 'com.android.support:appcompat-v7:23.2.1'

si vous avez d'autres classes dans votre projet qui doivent utiliser v7 appCompat, nettoyez et reconstruisez simplement le projet.

Wraithious
la source
6

Vous êtes arrivé à cela parce que vous voulez appliquer Material Design dans votre style de thème dans les versions sdk précédentes à 21. ActionBarActivitynécessite AppThemedonc si vous voulez également empêcher votre propre personnalisation de votre AppTheme, vous devez seulement changer votre styles.xml (précédent à sdk 21) de cette façon, peut hériter d'un thème de compatibilité d'application.

<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">

pour ça:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
danigonlinea
la source
6
Fait ça. Vous avez toujours le problème. Il y a donc plus.
Martin
6

Changez votre parent de style de thème en

 parent="Theme.AppCompat"

Cela a fonctionné pour moi ...

Fazal
la source
6

Vous avez plusieurs solutions à cette erreur.

  1. Vous devez utiliser Activity ou FragmentActivity au lieu d' ActionbarActivity ou AppCompatActivity

  2. Si vous souhaitez utiliser ActionbarActivity ou AppCompatActivity , vous devez changer dans styles.xml Theme.Holo.xxxx en Theme.AppCompat.Light (si nécessaire, ajouter à DarkActionbar )

Si vous n'avez pas besoin d'attributs avancés sur la barre d'actions ou AppCompat, vous n'avez pas besoin d'utiliser Actionbar ou AppCompat .

Kaloglu
la source
6

Dans le manifeste Android, changez simplement le thème de l'activité en AppTheme comme suit l'extrait de code

<activity
  android:name=".MainActivity"
  android:label="@string/app_name"
  android:theme="@style/AppTheme">
</activity>
shikha
la source
<activity android: name = ". MainActivity" android: label = "@ string / app_name" android: theme = "@ style / AppTheme"> </activity>
shikha
6

C'est quand vous voulez un AlertDialog dans un fragment

            AlertDialog.Builder adb = new AlertDialog.Builder(getActivity());
            adb.setTitle("My alert Dialogue \n");
            adb.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {

                  //some code

            } });
            adb.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {

                 dialog.dismiss();

                } });
            adb.show();
Avinash_ks
la source
6

Dans mes expériences, le problème était le contexte où j'ai montré ma boîte de dialogue. À l'intérieur d'un bouton, cliquez sur J'instancie un AlertDialog de cette manière:

builder = new AlertDialog.Builder(getApplicationContext());

Mais le contexte n'était pas correct et a provoqué l'erreur. Je l'ai changé en utilisant le contexte d'application de cette manière:

Dans la section déclarer:

Context mContext;

dans la méthode onCreate

mContext = this;

Et enfin dans le code où j'ai besoin du AlertDialog:

start_stop = (Button) findViewById(R.id.start_stop);
start_stop.setOnClickListener( new View.OnClickListener()
     {
                @Override
                public void onClick(View v)
                {
                    if (!is_running)
                    {
                        builder = new AlertDialog.Builder(mContext);
                        builder.setMessage("MYTEXT")
                                .setCancelable(false)
                                .setPositiveButton("SI", new DialogInterface.OnClickListener() {
                                    public void onClick(DialogInterface dialog, int id) {
                                    Task_Started = false;
                                    startTask();
                                    }
                                })
                                .setNegativeButton("NO",
                                        new DialogInterface.OnClickListener() {
                                    public void onClick(DialogInterface dialog, int id) {
                                        dialog.cancel();
                                    }
                                });
                        AlertDialog alert = builder.create();
                        alert.show();
                    }
            }
        }

C'est la solution pour moi.

Dante
la source
Vous avez raison de ne pas utiliser un contexte d'application comme vous l'aviez à l'origine. Vous avez plutôt utilisé une activité comme contexte. Il ne s'agit cependant pas d'un contexte d'application ou d'une sous-classe de celui-ci. Il n'est donc pas juste de dire que vous utilisez un contexte d'application d'une manière différente.
Hod
5

Celui-ci a fonctionné pour moi:

<application
           android:allowBackup="true"
           android:icon="@mipmap/ic_launcher"
           android:label="@string/app_name"
           android:theme="@style/AppTheme" >
           <activity
               android:name=".MainActivity"
               android:label="@string/app_name"
               android:theme="@style/Theme.AppCompat.NoActionBar">

               <intent-filter>
                   <action android:name="android.intent.action.MAIN" />

                   <category android:name="android.intent.category.LAUNCHER" />
               </intent-filter>
           </activity>
</application>
user1501382
la source
5

Votre activité étend ActionBarActivity qui nécessite l' application du AppCompat.theme . Passer d' ActionBarActivity à Activity ou FragmentActivity , cela résoudra le problème.

Si vous n'utilisez pas de barre d'action, alors:

android:theme="@android:style/Theme.Light.NoTitleBar.Fullscreen" 
Md Imran Choudhury
la source
5

J'avais ce même problème. Parce que je créais un tiroir de navigation personnalisé. Mais j'oublie de mentionner le thème dans mon manifeste comme ceci

android:theme="@style/Theme.AppCompat.NoActionBar"

Dès que j'ai ajouté le thème ci-dessus à mon manifeste, il a résolu le problème.

Azhar osws
la source
4

Solution rapide.

Changez votre parent de thème de base dans styles.xml

Remplacer de

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

à

<style name="AppTheme" parent="Theme.AppCompat">
Kaloglu
la source
ne m'aide pas, l'exception se déclenche toujours
Eugene Gr. Philippov
3

Cette solution a fonctionné pour moi.

La bibliothèque de conception dépend des bibliothèques de support Support v4 et AppCompat, donc n'utilisez pas de version différente pour appcompat et la bibliothèque de conception dans gradle.

utilisation

 compile 'com.android.support:appcompat-v7:23.0.0'
 compile 'com.android.support:design:23.0.0'

au lieu de

 compile 'com.android.support:appcompat-v7:23.0.0'
 compile 'com.android.support:design:23.1.0'
kiran boghra
la source