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 à la place afficher une activité en tant que boîte de dialogue au lieu d'utiliser les API de boîte de dialogue. Créez simplement une activité et définissez son thème sur Theme.Holo.Dialog dans l' <activity>
élément manifeste:
<activity android:theme="@android:style/Theme.Holo.Dialog" >
Cependant, lorsque j'ai essayé cela, j'obtiens 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 de 10 pour le min:
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>
La création de la boîte de dialogue comme celle-ci était quelque chose que j'allais faire, car j'avais déjà terminé la mise en page.
Quelqu'un peut-il me dire comment contourner ce problème?
la source
AppCompat
ce qui est de la bibliothèque de support pour prendre en charge les barres d'actions en dessous du niveau 11 de l'API. Utilisez-le simplementandroid:theme="@style/AppTheme" >
pour l'activité du manifesteAndroidManifest.xml
, le thème que vous spécifiez pour votre activité est prioritaire sur le thème que vous spécifiez pour votre application. Supprimez laandroid:theme
ligne de la<activity>
balise.Réponses:
La raison pour laquelle vous rencontrez ce problème est que l'activité à laquelle vous essayez d'appliquer le thème de la boîte de dialogue s'étend,
ActionBarActivity
ce qui nécessite que leAppCompat
thème soit appliqué.Mise à jour : l'extension
AppCompatActivity
aurait également ce problèmeDans ce cas, changer l'héritage Java à partir
ActionBarActivity
deActivity
et laisser le thème de dialogue dans le manifeste qu'il est, une nonTheme.AppCompat
valeurLa 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
AppCompat
thème et le code java devrait s'étendreAppCompatActivity
. Si vous avez * une activité qui n'a pas besoin de ce support, telle que vous ne vous souciez que des dernières versions et fonctionnalités d'Android, vous pouvez lui appliquer n'importe quel thème mais le code java doit s'étendre tout simplementActivity
.REMARQUE: lorsque vous passez de
AppCompatActivity
(ou d'une sous-classeActionBarActivity
) àActivity
, vous devez également modifier les différents appels avec "support" en l'appel correspondant sans "support". Donc, au lieu degetSupportFragmentManager
, appelezgetFragmentManager
.la source
ActionBarActivity
ce qui est indiqué dans ses déclarations d'importation du commentaire sous la question.Tout ce que vous devez faire est d'ajouter
android:theme="@style/Theme.AppCompat.Light"
à votre balise d'application dans leAndroidManifest.xml
fichier.la source
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 message et je me suis produite après avoir ajouté une boîte de dialogue d'alerte. J'ai toutes les informations de style pertinentes dans le manifeste. Mon problème a été résolu en modifiant une référence de contexte dans le générateur d'alertes - j'ai changé:
à:
Et plus de problèmes.
la source
getActivity()
plutôt quethis
comme suggéré ci-dessus et le problème est résolu. Quant à savoir pourquoi, je ne peux que supposer que l'ancien code AlertDialog.Builder (xxx) voulait soit un type différent transmis, soit était tout simplement moins pointilleux sur ce qui était passé, tandis que le Builder actuel () veut vraiment, vraiment, une activité. Étant donné que Google a choisi de masquer (supprimer?) La documentation de l'ancien code, probablement dans le but d'encourager l'utilisation de la version v7.app, je ne connais aucun moyen de le dire avec certitude.getContext()
au lieu dethis
si vous êtes dans un ArrayAdapter ou une classe d'adaptateur similaire.min sdk is 10.
ActionBar
is available from api level 11. Donc, pour 10, vous utiliseriez àAppCompat
partir de la bibliothèque de support pour laquelle vous devez utiliserTheme.AppCompat
ou descendante de la même.Utilisation
Ou si vous ne voulez pas de barre d'action en haut
Plus d'informations @
http://developer.android.com/guide/topics/ui/actionbar.html
Éditer:
J'ai peut-être mal lu le post op.
Semble op veut un dialogue avec un thème d'activité. Donc, comme déjà suggéré par Bobbake4 étendre
Activity
au lieu deActionBarActivity
.Consultez également les attributs @ 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/
la source
Si vous utilisez le contexte d'application, comme ceci:
changez-le en un contexte d'activité comme celui-ci:
la source
Je rencontrais ce problème même si mon thème était un
AppCompat
thème et mon activité était unAppCompatActivity
(ouActivity
, comme suggéré dans les réponses des autres). J'ai donc nettoyé, reconstruit et relancé le projet.( Build -> Clean Project; Build -> Rebuild Project; Run -> Run )
Cela peut sembler stupide, mais maintenant cela fonctionne très bien !
J'espère juste que ça aide!
la source
C'est ce qui l'a corrigé pour moi: au lieu de spécifier le thème dans le manifeste, je l'ai défini
onCreate
pour chaque activité qui s'étendActionBarActivity
:Voici
MyAppTheme
un descendant deTheme.AppCompat
, et est défini en xml. Notez que le thème doit être défini avantsuper.onCreate
etsetContentView
.la source
allez dans vos styles et mettez le parent
au lieu de
la source
Modifiez le thème de l'activité souhaitée. Cela fonctionne pour moi:
la source
Dans mon cas, je n'ai pas de fichier values-v21 dans mon répertoire res. Ensuite, je l'ai créé et y ai ajouté les codes suivants:
la source
J'ai eu un tel crash sur les appareils Samsung même si l'activité utilisait Theme.AppCompat . La cause première était liée à des optimisations étranges du côté de Samsung:
Ma solution venait de supprimer
android:launchMode="singleTask"
la source
Si vous devez étendre ActionBarActivity dont vous avez besoin sur votre style.xml:
Si vous définissez comme thème principal de votre application Android: Theme.Material.Light au lieu d' AppTheme.Base, vous obtiendrez une erreur «IllegalStateException: vous devez utiliser un thème Theme.AppCompat (ou un descendant) avec cette activité».
la source
Faites juste
Au lieu de
la source
this
devrait être.J'ai eu le même problème, mais il a été résolu lorsque j'ai mis cela sur le manifeste: android: theme = "@ style / Theme.AppCompat.
la source
Dans mon cas, un tel problème est apparu lorsque j'ai essayé de montrer Dialog. Le problème était dans le contexte, j'ai utilisé getBaseContext () qui théoriquement devrait renvoyer le contexte d'activité, mais semble que ce n'est pas le cas, ou il retourne le contexte avant tout thème appliqué.
Je viens donc de remplacer getBaseContexts () par " this ", et maintenant cela fonctionne comme prévu.
la source
J'ai eu une activité avec le thème
<android:theme="@android:style/Theme.Dialog">
utilisé pour afficher la boîte de dialogue dans mon application et j'ai eu le même problèmej'ai résolu cette erreur en changeant le code d'activité comme ci-dessous:
la source
pour moi était une solution pour utiliser ContextThemeWrapper:
depuis Android - Comment créer FAB par programmation?
la source
Assurez-vous que vous utilisez un contexte d'activité lors de la création d'une nouvelle boîte de dialogue d'alerte et non un contexte d'application ou de base.
la source
J'ai également eu ce problème et ce que j'ai fait pour le résoudre, ET toujours utiliser le thème Holo était de prendre les mesures suivantes:
j'ai d'abord remplacé cette importation:
avec celui-ci:
puis changé mon extension de:
pour ça:
Et a également dû modifier cette importation:
à cette importation:
puis vous pouvez utiliser votre balise de thème dans le manifeste au niveau de l'activité:
et enfin, (sauf si vous avez d'autres classes dans votre projet qui doivent 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:
si vous avez d'autres classes dans votre projet qui doivent utiliser v7 appCompat, nettoyez et reconstruisez simplement le projet.
la source
Vous êtes arrivé à cela parce que vous voulez appliquer Material Design dans votre style de thème dans les versions sdk précédentes à 21.
ActionBarActivity
nécessiteAppTheme
donc si vous voulez également empêcher votre propre personnalisation de votre AppTheme, vous devez seulement changer votre styles.xml (précédent à sdk 21) de cette façon, peut hériter d'un thème de compatibilité d'application.pour ça:
la source
Changez votre parent de style de thème en
Cela a fonctionné pour moi ...
la source
Vous avez plusieurs solutions à cette erreur.
Vous devez utiliser Activity ou FragmentActivity au lieu d' ActionbarActivity ou AppCompatActivity
Si vous souhaitez utiliser ActionbarActivity ou AppCompatActivity , vous devez changer dans styles.xml Theme.Holo.xxxx en Theme.AppCompat.Light (si nécessaire, ajouter à DarkActionbar )
Si vous n'avez pas besoin d'attributs avancés sur la barre d'actions ou AppCompat, vous n'avez pas besoin d'utiliser Actionbar ou AppCompat .
la source
Dans le manifeste Android, changez simplement le thème de l'activité en AppTheme comme suit l'extrait de code
la source
C'est quand vous voulez un AlertDialog dans un fragment
la source
Dans mes expériences, le problème était le contexte où j'ai montré ma boîte de dialogue. À l'intérieur d'un bouton, cliquez sur J'instancie un AlertDialog de cette manière:
Mais le contexte n'était pas correct et a provoqué l'erreur. Je l'ai changé en utilisant le contexte d'application de cette manière:
Dans la section déclarer:
dans la méthode onCreate
Et enfin dans le code où j'ai besoin du AlertDialog:
C'est la solution pour moi.
la source
Celui-ci a fonctionné pour moi:
la source
Votre activité étend ActionBarActivity qui nécessite l' application du AppCompat.theme . Passer d' ActionBarActivity à Activity ou FragmentActivity , cela résoudra le problème.
la source
J'avais 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
Dès que j'ai ajouté le thème ci-dessus à mon manifeste, il a résolu le problème.
la source
Solution rapide.
Changez votre parent de thème de base dans styles.xml
Remplacer de
à
la source
Cette solution a fonctionné pour moi.
La bibliothèque de conception dépend des bibliothèques de support Support v4 et AppCompat, donc n'utilisez pas de version différente pour appcompat et la bibliothèque de conception dans gradle.
utilisation
au lieu de
la source