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

52voto

Geraldo Neto Points 2006

Je rencontrais ce problème alors que mon Thème était un AppCompat Thème et mon activité était une AppCompatActivity (ou Activity comme suggéré dans d'autres réponses). J'ai donc nettoyé, reconstruit et relancé le projet.

( Construire -> Nettoyer le projet ; Construire -> Reconstruire le projet ; Exécuter -> Exécuter )

Cela peut sembler stupide, mais maintenant c'est fonctionne très bien !

J'espère que cela vous aidera !

31voto

k29 Points 592

C'est ce qui m'a permis de résoudre le problème : au lieu de spécifier le thème dans le manifeste, je l'ai défini dans onCreate pour chaque activité qui é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 en xml. Notez que le thème doit être défini avant super.onCreate y setContentView .

26voto

Yamen Nassif Points 1483

Allez dans vos styles et mettez le parent

parent="Theme.AppCompat"

au lieu de

parent="@android:style/Theme.Holo.Light"

17voto

sharma_kunal Points 354

Modifier le thème de l'activité souhaitée. Voici ce qui fonctionne pour moi :

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

16voto

Ali Akram Points 601

Faites-le

new AlertDialog.Builder(this)

Au lieu de

new AlertDialog.Builder(getApplicationContext())

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