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

8voto

Shivam Dawar Points 51

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

7voto

Azhar osws Points 108

Je rencontrais le même problème. Parce que j'ai créé un tiroir de navigation personnalisé. Mais j'ai oublié 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, le problème a été résolu.

7voto

Kaloglu Points 110

Vous avez de nombreuses solutions à cette erreur.

  1. Vous devez utiliser Activité o FragmentActivité au lieu de ActionbarActivity o AppCompatActivity

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

Si vous n'avez pas besoin d'attributs avancés concernant la barre d'action ou les AppCompat vous n'avez pas besoin d'utiliser Barre d'action o AppCompat .

7voto

shikha Points 61

Dans le manifeste Android, il suffit de changer le thème de l'activité en AppTheme comme le montre l'extrait de code suivant

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

6voto

Avinash_ks Points 107

C'est le cas lorsque 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();

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