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

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 voulez un dialogue personnalisé, vous pouvez à la place afficher une activité sous forme de dialogue au lieu d'utiliser le dialogue APIs. Créez simplement une activité et mettez son thème à thème.Holo.Dans la boîte de dialogue l'élément de manifeste <activity> :

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

cependant, quand j'ai essayé cela, j'ai eu l'exception suivante:

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

je supporte ce qui suit, et je ne peux pas utiliser quelque chose de plus grand que 10 pour le min:

minSdkVersion 10
targetSdkVersion 19

Dans mes styles j'ai le texte suivant:

<!-- 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>

créer la boîte de dialogue comme ceci était quelque chose que je sautillais à faire, car j'ai déjà terminé la mise en page.

quelqu'un Peut-il me dire comment je peux contourner ce problème?

798
demandé sur Kara 2014-02-16 21:34:08

30 réponses

la raison pour laquelle vous avez ce problème est que l'activité que vous essayez d'appliquer le thème de dialogue est d'étendre ActionBarActivity qui nécessite le thème AppCompat à appliquer.

mise à jour : extension AppCompatActivity aurait également ce problème

dans ce cas, changer L'héritage Java de ActionBarActivity à Activity et laisser le thème de dialogue dans le manifeste comme il est, un non Theme.AppCompat valeur


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 thème AppCompat et le code java devrait étendre AppCompatActivity . Si vous avez *une activité qui n'a pas besoin de ce soutien, comme vous ne vous souciez que des dernières versions et des fonctionnalités D'Android, vous pouvez appliquer n'importe quel thème à elle, mais le code java doit étendre simple Vieux Activity .


NOTE: lorsqu'il y a passage de AppCompatActivity (ou d'une sous-classe, ActionBarActivity ) à Activity , il faut également changer les différents appels avec "support" à l'appel correspondant sans "support". Donc , au lieu de getSupportFragmentManager , appelez getFragmentManager .

989
répondu Bobbake4 2017-06-13 13:39:41

Tout ce que vous devez faire est d'ajouter android:theme="@style/Theme.AppCompat.Light" à votre étiquette de demande dans le fichier AndroidManifest.xml .

476
répondu iusting 2014-09-04 11:33:33

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 poteau et est arrivé après que j'ai ajouté une boîte de dialogue d'alerte. J'ai toutes les informations de style dans le manifeste. Mon problème a été résolu en changeant une référence de contexte dans l'alert builder - j'ai changé:

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

à:

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

et plus de problèmes.

179
répondu A.K. 2015-11-27 00:59:26

min sdk est 10. ActionBar est disponible à partir du niveau api 11. Donc pour 10 vous utiliserez AppCompat de la bibliothèque de soutien pour laquelle vous devez utiliser Theme.AppCompat ou descendant de la même.

Utiliser

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

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

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

plus d'info @

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

Edit:

j'ai peut-être mal lu op post.

semble op veut un dialogue avec un thème D'activité. Donc, comme déjà suggéré par Bobbake4 étendre Activity au lieu de ActionBarActivity .

ont aussi un attribut look @ 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 /

85
répondu Raghunandan 2018-07-15 09:27:49

cela a fonctionné pour moi, je viens de changer:

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

à ceci:

final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
63
répondu Darush 2016-10-21 20:27:18

j'éprouvais ce problème même si mon thème était AppCompat et mon activité était AppCompatActivity (ou Activity , comme suggéré dans les réponses d'autres). Alors j'ai nettoyé, reconstruit et relancé le projet.

( Build -> Nettoyage De Projet ; Build -> Projet De Reconstruction ; Exécuter -> Exécuter )

il peut sembler stupide, mais maintenant il fonctionne grand !

espérons que ça aide!

31
répondu Geraldo Neto 2017-05-19 21:48:53

C'est ce qui l'a fixé pour moi: au lieu de spécifier le thème dans le manifeste, Je l'ai défini dans onCreate pour 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);
...
}

ici MyAppTheme est un descendant de Theme.AppCompat , et est défini dans xml. Notez que le thème doit être placé avant super.onCreate et setContentView .

24
répondu k29 2015-01-14 21:37:26

allez à vos styles et mettez le parent

parent="Theme.AppCompat"

au lieu de

parent="@android:style/Theme.Holo.Light"
17
répondu Yamen Nassif 2014-12-03 10:45:13

dans mon cas, je n'ai pas de fichier values-v21 dans mon répertoire res. Puis 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>
16
répondu Ali Gürelli 2016-06-23 09:04:40

si vous avez besoin d'étendre ActionBarActivity 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:Thème.Matériel.Light au lieu de AppTheme.Base puis vous obtiendrez une "IllegalStateException: vous devez utiliser un thème.Thème AppCompat (ou descendant) avec cette activité" erreur.

13
répondu JonasOliveira 2015-05-03 22:10:28

changer le thème de l'activité désirée. Cela me convient:

<activity
            android:name="HomeActivity"
            android:screenOrientation="landscape"
            android:theme="@style/Theme.AppCompat.Light"
            android:windowSoftInputMode="stateHidden" />
13
répondu sharma_kunal 2018-02-07 18:36:18

j'ai eu le même problème, mais il a résolu Quand je l'ai mis sur 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>
12
répondu Marc Baduq 2016-03-08 15:30:02

j'ai eu un tel accident sur Samsung appareils même si l'activité a utilisé thème.AppCompat . La cause fondamentale était liée à des optimisations bizarres 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 était en train d'enlever android:launchMode="singleTask"

11
répondu goRGon 2015-04-29 00:08:58

pour moi était la solution D'utiliser ContextThemeWrapper:

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

de Android - comment créer fab programmatically?

7
répondu Peter 2017-05-23 12:10:42

Just Do

new AlertDialog.Builder(this)

au lieu de

new AlertDialog.Builder(getApplicationContext())
7
répondu Ali Akram 2018-06-27 10:37:06

vous avez beaucoup de solutions à cette erreur.

  1. Vous devez utiliser Activité ou FragmentActivity au lieu de ActionbarActivity ou AppCompatActivity

  2. Si vous voulez utiliser ActionbarActivity ou AppCompatActivity , vous devez modifier dans style.xml thème.Holo.xxxx à thème.AppCompat.Light (si nécessaire, ajouter à DarkActionbar )

si vous n'avez pas besoin d'attributs avancés sur la barre d'action ou AppCompat vous n'avez pas besoin d'utiliser Actionbar ou AppCompat .

6
répondu Kaloglu 2016-01-22 00:06:33

dans Android manifest juste changer le thème de l'activité à AppTheme comme suit code snippet

<activity
  android:name=".MainActivity"
  android:label="@string/app_name"
  android:theme="@style/AppTheme">
</activity>
6
répondu shikha 2016-02-09 06:28:05

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();
6
répondu Avinash_ks 2017-03-20 06:21:30

j'ai eu ce problème aussi bien et ce que j'ai fait pour le corriger, et toujours utiliser le thème Holo était de prendre ces mesures:

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 {//...

à ceci:

public class MyClass extends Activity {//...

et a également dû changer cette importation:

import android.support.v7.app.AlertDialog;

à cette importation:

import android.app.AlertDialog;

et ensuite vous pouvez utiliser votre étiquette thématique 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 doit 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 doit utiliser v7 appCompat alors tout simplement nettoyer et reconstruire projet.

6
répondu Wraithious 2017-11-11 22:37:19

vous êtes venu à cela parce que vous voulez appliquer le Design matériel dans votre thème style dans les versions sdk précédentes à 21. ActionBarActivity nécessite AppTheme donc si vous voulez aussi empêcher votre propre personnalisation de votre Appthème, seulement vous devez changer dans vos styles.xml (antérieur au sdk 21) de cette façon, peut hériter pour un thème compat App.

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

pour ceci:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
5
répondu danigonlinea 2014-11-27 10:11:16

changez votre thème style parent en

 parent="Theme.AppCompat"

ça a marché pour moi ...

5
répondu Fazal 2015-02-09 16:50:41

celui-ci a travaillé 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>
5
répondu user1501382 2015-04-18 06:55:34

Votre Activité est l'extension de ActionBarActivity qui exige que le AppCompat.thème à appliquer. Passer de Actionactivité à activité ou Fragmentactivité , il résoudra le problème.

si vous n'utilisez aucune barre D'Action alors:

android:theme="@android:style/Theme.Light.NoTitleBar.Fullscreen" 
5
répondu Md Imran Choudhury 2015-04-20 20:03:56

solution rapide.

changez votre thème de base parent en styles.xml

remplacer de

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

à

<style name="AppTheme" parent="Theme.AppCompat">
4
répondu Kaloglu 2017-10-22 12:57:53
L'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.

4
répondu Dante 2018-01-29 12:12:31

Cette solution a fonctionné pour moi.

bibliothèque de conception dépend de la prise en charge V4 et AppCompat bibliothèques de soutien, donc ne pas utiliser une version différente pour appcompat et bibliothèque de conception dans gradle.

utiliser

 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'
3
répondu kiran boghra 2016-08-03 11:58:14

j'ai eu 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:thème="@style/Thème.AppCompat.NoActionBar "

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

3
répondu Azhar osws 2017-11-18 07:34:28

pour moi, aucune des réponses ci-dessus n'a fonctionné même après que j'ai eu Theme.AppCompat comme thème de base pour l'application. J'utilisais com.android.support:design:24.1.0 donc j'ai juste changé la version en 24.1.1 . Après la synchronisation de Grad, son fonctionnement à nouveau et l'exception a disparu. Il me semble que le problème était avec certaines versions plus anciennes de bibliothèques de soutien de conception.

je mets juste ça ici au cas où d'autres réponses ne fonctionnent pas pour certaines personnes.

3
répondu Sharp Edge 2017-11-24 13:26:30

dans mon cas, je gonflais une vue avec un contexte applicatif. Lorsque vous utilisez ApplicationContext, le thème / style n'est pas appliqué, donc bien qu'il y ait eu le thème.Appcompat dans mon style, il n'a pas été appliqué et a causé cette exception. Plus de détails: thème / Style n'est pas appliqué lorsque gonflant utilisé avec Applicationcontexte

3
répondu Murat 2017-12-22 16:48:49

mon activité avec SectionsPagerAdapter et ViewPager & Fragment

public class MyActivity extends AppCompatActivity implements ActionBar.TabListener
...
...
     @Override
        public void onPostResume(){
            super.onPostResume();
            try {
               getSupportActionBar().setDisplayShowTitleEnabled(false);
            }catch (NullPointerException ignored){
            }
        }
2
répondu valera 2015-10-21 09:56:47