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

1183voto

Bobbake4 Points 6297

La raison pour laquelle vous rencontrez ce problème est que l'activité à laquelle vous essayez d'appliquer le thème de dialogue est en train de s'étendre ActionBarActivity qui exige que le AppCompat à appliquer.

Mise à jour : Extension AppCompatActivity aurait également ce problème

Dans ce cas, modifiez l'héritage Java de ActionBarActivity à Activity et laisser le thème du dialogue dans le manifeste tel qu'il est, un thème non Theme.AppCompat valeur


En règle générale, si vous souhaitez que votre code prenne en charge les anciennes versions d'Android, il doit comporter l'option AppCompat et le code Java doit étendre le thème AppCompatActivity . Si vous avez *une activité qui n'a pas besoin de ce support, par exemple si vous ne vous intéressez qu'aux dernières versions et fonctionnalités d'Android, vous pouvez lui appliquer n'importe quel thème, mais le code java doit étendre les anciens thèmes. Activity .


REMARQUE : Lorsque l'on passe de AppCompatActivity (ou une sous-classe, ActionBarActivity ), à Activity Il faut également remplacer les différents appels avec "support" par l'appel correspondant. sans "support". Ainsi, au lieu de getSupportFragmentManager , appeler getFragmentManager .

6 votes

L'opérateur utilise appcompat, auquel cas il devrait étendre le champ d'application de ActionBarActivity c'est ce qui ressort de ses déclarations d'importation dans le commentaire sous la question.

0 votes

J'ai donc modifié ma classe pour qu'elle étende l'activité, c'est-à-dire la classe publique MainActivity extends Activity {. Cependant, je rencontre toujours le même problème.

1 votes

Il essaie de créer une activité sur le thème du dialogue qui n'aurait pas de barre d'action. Vous pouvez facilement le faire en utilisant la bibliothèque AppCompat, mais vous ne pouvez pas le faire si votre activité étend ActionBarActivity. S'il modifie le code Java pour qu'il s'étende à partir d'Activity, il obtiendra une activité à thème de dialogue comme le demande sa question. @ant2009 Ne devriez-vous pas modifier com.ssd.register.Dialog_update pour qu'il s'étende à partir d'Activity et non de MainActivity ?

592voto

iusting Points 103

Il suffit d'ajouter android:theme="@style/Theme.AppCompat.Light" à votre balise d'application dans la balise AndroidManifest.xml fichier.

2 votes

Dans le code, ant2009 a défini AppTheme comme thème d'application qui s'étend à partir d'un descendant de Theme.AppCompat. Cela devrait fonctionner. J'ai eu le même problème après la mise à jour vers la version 5.0 sur mon appareil et j'ai fini par définir @style/Theme.AppCompat.Light comme thème sur mon activité. Il y a quelque chose qui ne va pas ici...

0 votes

Je fais ajouter un thème à chaque activité et application. Cela ne fonctionne toujours pas. Il y a encore d'autres choses à faire.

38 votes

Ce n'est pas une réponse valide pour Android Studio, bien que dans certains cas cela fonctionne comme une solution rapide lorsque l'on contourne les fichiers styles.xml. Dans Android Studio, la bonne façon de définir un thème est de le définir dans les fichiers styles.xml, puis le fichier menifest d'Android y fera simplement référence et les sélectionnera en fonction de la version d'Android que vous utilisez sur votre appareil. Habituellement, il est défini à Android:theme="@style/AppTheme" et cet AppTheme se réfère à <style name="Theme.AppTheme" parent="Theme.AppCompat.Light"> dans styles.xml.

302voto

A.K. Points 110

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 mentionnée en haut de l'article et qui s'est produite après que j'ai ajouté un dialogue d'alerte. J'ai toutes les informations de style pertinentes dans le manifeste. Mon problème a été résolu en changeant une référence de contexte dans le constructeur d'alerte - j'ai changé :

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

à :

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

Et plus de problèmes.

134voto

Darush Points 3150

Si vous utilisez le contexte de l'application, comme ceci :

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

le transformer en contexte d'activité comme ceci :

final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);

119voto

Raghunandan Points 63969

Le sdk minimum est de 10. ActionBar est disponible à partir du niveau 11 de l'API. Pour le niveau 10, vous devez donc utiliser AppCompat de la bibliothèque de support pour laquelle vous devez utiliser Theme.AppCompat ou de ses descendants.

Utilisation

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

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

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

Plus d'info @

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

Edita:

Il se peut que j'aie mal lu le message de l'op.

Il semble que l'op veuille un dialogue sur le thème de l'activité. Ainsi, comme l'a déjà suggéré Bobbake4, étendez Activity au lieu de ActionBarActivity .

Jetez également un coup d'œil aux Attributs du dialogue 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/

0 votes

Merci pour cette suggestion. J'ai déjà essayé cela en fait. Et j'ai le même problème. Mon fichier de styles ressemble à ceci : <style name="AppTheme" parent="Theme.AppCompat">

0 votes

@ant2009 vous ne le ferez pas. Utilisez un thème de la bibliothèque AppCompat pour votre activité.

0 votes

Je ne suis pas sûr d'ajouter ce thème correctement. Mais voulez-vous dire que vous ajoutez l'instruction d'importation suivante ? import Android.support.v7.appcompat.* ; Cependant, j'ai essayé cela et peut-être que je me trompe car je me suis toujours retrouvé avec la même exception.

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