Android Studio 0.4.5
Android-Dokumentation zum Erstellen benutzerdefinierter Dialogfelder: http://developer.android.com/guide/topics/ui/dialogs.html
Wenn Sie ein benutzerdefiniertes Dialogfeld möchten, können Sie stattdessen eine Aktivität als Dialogfeld anzeigen, anstatt die Dialog-APIs zu verwenden. Erstellen Sie einfach eine Aktivität und setzen Sie das Thema im <activity>
Manifest-Element auf Theme.Holo.Dialog :
<activity android:theme="@android:style/Theme.Holo.Dialog" >
Als ich dies versuchte, bekam ich jedoch die folgende Ausnahme:
java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity
Ich unterstütze Folgendes und kann für die Minute nicht mehr als 10 verwenden:
minSdkVersion 10
targetSdkVersion 19
In meinen Stilen habe ich Folgendes:
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
Und in meinem Manifest habe ich dies für die Aktivität:
<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>
Das Erstellen des Dialogfelds wie dieses war etwas, zu dem ich hüpfen wollte, da ich das Layout bereits fertiggestellt habe.
Kann mir jemand sagen, wie ich dieses Problem umgehen kann?
quelle
AppCompat
die Support-Bibliothek, um Aktionsleisten unterhalb der API-Ebene 11 zu unterstützen. Verwenden Sie sie einfachandroid:theme="@style/AppTheme" >
für die Aktivität im ManifestAndroidManifest.xml
Thema überschreibt das Thema, das Sie für Ihre Aktivität angeben , das Thema, das Sie für Ihre Anwendung angeben . Entfernen Sie dieandroid:theme
Linie vom<activity>
Tag.Antworten:
Der Grund für dieses Problem liegt darin, dass die Aktivität, auf die Sie das Dialogthema anwenden möchten, erweitert wird und
ActionBarActivity
dasAppCompat
Thema angewendet werden muss.Update : Erweitern
AppCompatActivity
hätte auch dieses ProblemÄndern Sie in diesem Fall die Java-Vererbung von
ActionBarActivity
nachActivity
und lassen Sie das Dialogfeldthema im Manifest unverändert, ein Nicht-Theme.AppCompat
WertDie allgemeine Regel lautet: Wenn Ihr Code ältere Android-Versionen unterstützen soll, sollte er das
AppCompat
Thema haben und der Java-Code sollte erweitert werdenAppCompatActivity
. Wenn Sie * eine Aktivität haben, die diese Unterstützung nicht benötigt, z. B. wenn Sie sich nur um die neuesten Versionen und Funktionen von Android kümmern, können Sie ein beliebiges Thema darauf anwenden, aber der Java-Code muss einfach alt seinActivity
.HINWEIS: Beim Wechsel von
AppCompatActivity
(oder einer UnterklasseActionBarActivity
) zuActivity
müssen auch die verschiedenen Anrufe mit "Unterstützung" in den entsprechenden Anruf ohne "Unterstützung" geändert werden . Also stattgetSupportFragmentManager
anrufengetFragmentManager
.quelle
ActionBarActivity
, was aus seinen Importanweisungen aus dem Kommentar unter der Frage hervorgeht.Alles, was Sie tun müssen, ist
android:theme="@style/Theme.AppCompat.Light"
, Ihrem Anwendungs-Tag in derAndroidManifest.xml
Datei etwas hinzuzufügen .quelle
Kopieren der Antwort von @MarkKeen in den obigen Kommentaren, da ich das gleiche Problem hatte.
Ich hatte den Fehler oben im Beitrag angegeben und trat auf, nachdem ich einen Warndialog hinzugefügt hatte. Ich habe alle relevanten Stilinformationen im Manifest. Mein Problem wurde behoben, indem eine Kontextreferenz im Alert Builder geändert wurde. Ich habe Folgendes geändert:
zu:
Und keine Probleme mehr.
quelle
getActivity()
nichtthis
wie oben vorgeschlagen, und das Problem ist behoben. Was den Grund angeht, kann ich nur vermuten, dass der ältere AlertDialog.Builder (xxx) -Code entweder einen anderen Typ übergeben wollte oder einfach weniger wählerisch war, was übergeben wurde, während der aktuelle Builder () wirklich, wirklich eine Aktivität wünscht. Da Google beschlossen hat, die Dokumentation für den alten Code auszublenden (zu entfernen?), Vermutlich um die Verwendung der Version v7.app zu fördern, kann ich dies nicht mit Sicherheit sagen.getContext()
anstatt sichthis
in einem ArrayAdapter oder einer ähnlichen Adapterklasse zu befinden.min sdk is 10.
ActionBar
ist ab API-Level 11 verfügbar. Für 10 würden Sie alsoAppCompat
aus der Support-Bibliothek verwenden, für die Sie diese verwenden müssen,Theme.AppCompat
oder deren Nachkommen.Verwenden
Oder wenn Sie keine Aktionsleiste oben möchten
Mehr Info @
http://developer.android.com/guide/topics/ui/actionbar.html
Bearbeiten:
Ich habe den Beitrag möglicherweise falsch gelesen.
Scheint op möchte einen Dialog mit einem Aktivitätsthema. Also wie schon von Bobbake4 vorgeschlagen verlängern
Activity
stattActionBarActivity
.Schauen Sie sich auch die @ Dialog-Attribute unter dem folgenden Link an
http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.4_r1/frameworks/base/core/res/res/values/themes.xml/
quelle
Wenn Sie den Anwendungskontext wie folgt verwenden:
Ändern Sie es in einen Aktivitätskontext wie diesen:
quelle
Ich hatte dieses Problem, obwohl mein Thema ein
AppCompat
Thema war und meine Aktivität einAppCompatActivity
(oderActivity
, wie in den Antworten anderer vorgeschlagen). Also habe ich das Projekt gereinigt, neu aufgebaut und erneut ausgeführt.( Erstellen -> Projekt bereinigen; Erstellen -> Projekt neu erstellen; Ausführen -> Ausführen )
Es mag dumm erscheinen, aber jetzt funktioniert es großartig !
Hoffe nur, dass es hilft!
quelle
Dies hat es für mich behoben: Anstatt das Thema im Manifest anzugeben, habe ich es
onCreate
für jede Aktivität definiert, die sich erstrecktActionBarActivity
:Hier
MyAppTheme
ist ein Nachkomme vonTheme.AppCompat
und wird in XML definiert. Beachten Sie, dass das Thema vorsuper.onCreate
und festgelegt werden musssetContentView
.quelle
Gehen Sie zu Ihren Stilen und setzen Sie die Eltern
anstatt
quelle
In meinem Fall habe ich keine Datei values-v21 in meinem res-Verzeichnis. Dann habe ich es erstellt und folgende Codes hinzugefügt:
quelle
Ändern Sie das Thema der gewünschten Aktivität. Das funktioniert bei mir:
quelle
Ich hatte einen solchen Absturz auf Samsung- Geräten, obwohl die Aktivität Theme.AppCompat verwendete . Die Hauptursache lag in seltsamen Optimierungen auf Samsung-Seite:
Meine Lösung war nur zu entfernen
android:launchMode="singleTask"
quelle
Wenn Sie ActionBarActivity erweitern müssen, benötigen Sie für Ihre style.xml:
Wenn Sie als Hauptthema Ihrer Anwendung android: Theme.Material.Light anstelle von AppTheme.Base festlegen , wird die Fehlermeldung "IllegalStateException: Sie müssen für diese Aktivität ein Theme.AppCompat-Design (oder einen Nachkommen) für diese Aktivität verwenden" angezeigt.
quelle
Mach einfach
Anstatt
quelle
this
erwartet wird.Ich hatte das gleiche Problem, aber es wurde gelöst, als ich dies auf manifest stellte: android: theme = "@ style / Theme.AppCompat.
quelle
In meinem Fall trat ein solches Problem auf, als ich versuchte, Dialog anzuzeigen. Das Problem war im Kontext, ich habe getBaseContext () verwendet, das theoretisch den Aktivitätskontext zurückgeben sollte, aber nicht angezeigt wird, oder es gibt den Kontext zurück, bevor ein Thema angewendet wird.
Also habe ich getBaseContexts () durch " this " ersetzt und jetzt funktioniert es wie erwartet.
quelle
Ich hatte eine Aktivität mit einem Thema,
<android:theme="@android:style/Theme.Dialog">
das zum Anzeigen des Dialogs in meinem AppWidget verwendet wurde, und ich hatte das gleiche ProblemIch habe diesen Fehler behoben, indem ich den Aktivitätscode wie folgt geändert habe:
quelle
Für mich war die Lösung ContextThemeWrapper zu verwenden:
von Android - Wie erstelle ich FAB programmgesteuert?
quelle
Stellen Sie sicher, dass Sie beim Erstellen eines neuen Warnungsdialogs einen Aktivitätskontext verwenden und keinen Anwendungs- oder Basiskontext.
quelle
Ich hatte auch dieses Problem und was ich getan habe, um es zu beheben, und immer noch das Holo-Thema zu verwenden, war, diese Schritte zu unternehmen:
Zuerst habe ich diesen Import ersetzt:
mit diesem:
dann änderte sich meine Erweiterung von:
dazu:
Und musste auch diesen Import ändern:
zu diesem Import:
und dann können Sie Ihr Theme-Tag im Manifest auf Aktivitätsebene verwenden:
Und schließlich können Sie (sofern Sie keine anderen Klassen in Ihrem Projekt haben, die v7 appCompat verwenden müssen) Ihr Projekt entweder bereinigen und neu erstellen oder diesen Eintrag in der Gradle-Build-Datei auf App-Ebene löschen:
Wenn Sie andere Klassen in Ihrem Projekt haben, die v7 appCompat verwenden müssen, bereinigen Sie das Projekt und erstellen Sie es neu.
quelle
Sie haben dazu gekommen , weil Sie in früheren Versionen sdk bis 21. Material Design in Ihrem Thema Stil anwenden möchten
ActionBarActivity
erfordertAppTheme
also , wenn Sie wollen auch Ihre eigenen Anpassungen über Ihre AppTheme verhindern, nur Sie in Ihrem styles.xml zu ändern (iV auf diese Weise kann für ein App Compat-Thema erben.dafür:
quelle
Ändern Sie Ihren übergeordneten Themenstil in
Das hat bei mir funktioniert ...
quelle
Sie haben viele Lösungen für diesen Fehler.
Sie sollten Activity oder FragmentActivity anstelle von ActionbarActivity oder AppCompatActivity verwenden
Wenn Sie ActionbarActivity oder AppCompatActivity verwenden möchten , sollten Sie in styles.xml Theme.Holo.xxxx in Theme.AppCompat.Light ändern (falls erforderlich zu DarkActionbar hinzufügen ).
Wenn Sie keine erweiterten Attribute für die Aktionsleiste oder AppCompat benötigen, müssen Sie die Aktionsleiste oder AppCompat nicht verwenden .
quelle
Ändern Sie im Android-Manifest einfach das Thema der Aktivität in AppTheme wie folgt: Code-Snippet
quelle
In diesem Fall möchten Sie einen AlertDialog in einem Fragment
quelle
Nach meinen Erfahrungen war das Problem der Kontext, in dem ich meinen Dialog zeigte. Innerhalb eines Schaltflächenklicks instanziiere ich einen AlertDialog auf folgende Weise:
Der Kontext war jedoch nicht korrekt und verursachte den Fehler. Ich habe es mithilfe des Anwendungskontexts folgendermaßen geändert:
Im Abschnitt deklarieren:
in der onCreate-Methode
Und schließlich in dem Code, in dem ich den AlertDialog benötige:
Das ist die Lösung für mich.
quelle
Dieser hat für mich funktioniert:
quelle
Ihre Aktivität erweitert ActionBarActivity, für die das AppCompat.theme angewendet werden muss. Wenn Sie von ActionBarActivity zu Activity oder FragmentActivity wechseln , wird das Problem gelöst.
quelle
Ich hatte das gleiche Problem. Weil ich eine benutzerdefinierte Navigationsschublade erstellt habe. Aber ich vergesse, das Thema in meinem Manifest so zu erwähnen
Sobald ich das obige Thema zu meinem Manifest hinzugefügt habe, wurde das Problem behoben.
quelle
Schnelle Lösung.
Ändern Sie Ihr übergeordnetes Basisthema in styles.xml
Ersetzen von
zu
quelle
Diese Lösung hat bei mir funktioniert.
Die Designbibliothek hängt von den Support v4- und AppCompat-Supportbibliotheken ab. Verwenden Sie daher keine andere Version für Appcompat und Designbibliothek in Gradle.
verwenden
anstatt
quelle