1129 votes

Vous devez utiliser un thème Theme.AppCompat (ou un 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 souhaitez une boîte de dialogue personnalisée, vous pouvez afficher une activité sous forme de boîte de dialogue au lieu d'utiliser les API de boîte de dialogue. Il suffit de créer une activité et de définir son thème sur Theme.Holo.Dialog dans la section dans l'élément <activity> élément manifeste :

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

Cependant, lorsque j'ai essayé de le faire, j'ai obtenu 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 grand que 10 pour la valeur minimale :

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>

Créer la boîte de dialogue de cette manière était quelque chose que j'espérais faire, car j'avais déjà terminé la mise en page.

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

0 votes

Utilisez-vous AppCompat de la bibliothèque d'appui ?

2 votes

@Raghunandan, je suis novice en la matière, mais en regardant mes styles, j'ai ce qui suit : <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 suis pas sûr de ce que tout cela signifie.

14 votes

Vous utilisez AppCompat qui forme la bibliothèque de support pour les barres d'action inférieures au niveau 11 de l'API. Il suffit d'utiliser android:theme="@style/AppTheme" > pour l'activité dans le manifeste

6voto

Dante Points 89

Dans mon expérience, le problème était le contexte dans lequel je montrais mon dialogue. Lors d'un clic sur un bouton, j'instancie un AlertDialog de la manière suivante :

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

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

En déclarer la section :

Context mContext;

dans la méthode onCreate

mContext = this;

Et enfin dans le code où j'ai besoin de 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.

6voto

Fazal Points 2069

Changez le parent du style de votre thème en

 parent="Theme.AppCompat"

Cela a fonctionné pour moi ...

6voto

user1501382 Points 778

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>

6voto

Md Imran Choudhury Points 2536

Votre activité s'étend ActionBarActivity qui exige que le AppCompat.theme à appliquer. Changement de ActionBarActivity à Activité o FragmentActivité Cela résoudra le problème.

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

android:theme="@android:style/Theme.Light.NoTitleBar.Fullscreen"

4voto

Kaloglu Points 110

Solution rapide.

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

Remplacer de

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

à

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

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