Android Studio 0.4.5
Android-Dokumentation zur Erstellung benutzerdefinierter Dialogfelder: http://developer.android.com/guide/topics/ui/dialogs.html
Wenn Sie einen benutzerdefinierten Dialog wünschen, können Sie stattdessen eine Activity als Dialog anzeigen, anstatt die Dialog-APIs zu verwenden. Erstellen Sie einfach eine Activity und setzen Sie deren Theme auf Theme.Holo.Dialog in
dem <activity>
Manifest-Element:
<activity android:theme="@android:style/Theme.Holo.Dialog" >
Als ich dies jedoch versuchte, erhielt ich die folgende Ausnahme:
java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity
Ich unterstütze das Folgende, und ich kann nicht mit etwas größer als 10 für die min:
minSdkVersion 10
targetSdkVersion 19
In meinen Stilen habe ich das Folgende:
<!-- 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 Dialogfeld auf diese Weise zu erstellen, war etwas, das ich unbedingt tun wollte, da ich das Layout bereits fertiggestellt habe.
Kann mir jemand sagen, wie ich dieses Problem umgehen kann?
Der Grund für dieses Problem liegt darin, dass die Aktivität, auf die Sie das Dialogthema anwenden wollen, die ActionBarActivity
erweitert, die die Anwendung des AppCompat
-Themas erfordert.
Aktualisierung: Bei der Erweiterung von AppCompatActivity
würde dieses Problem ebenfalls auftreten.
In diesem Fall ändern Sie die Java-Vererbung von ActionBarActivity
auf Activity
und belassen das Dialogthema im Manifest wie es ist, ein nicht Theme.AppCompat
Wert
Die allgemeine Regel ist, dass wenn Sie wollen, dass Ihr Code ältere Versionen von Android unterstützt, sollte er das AppCompat
Thema haben und der Java Code sollte AppCompatActivity
erweitern. Wenn Sie eine Aktivität haben, die diese Unterstützung nicht benötigt, weil Sie sich nur um die neuesten Versionen und Funktionen von Android kümmern, können Sie jedes beliebige Thema darauf anwenden, aber der Java-Code muss die einfache alte Activity
erweitern.
HINWEIS: Wenn Sie von AppCompatActivity
(oder einer Unterklasse, ActionBarActivity
) zu Activity
wechseln, müssen Sie auch die verschiedenen Aufrufe mit "support" in den entsprechenden Aufruf ohne "support" ändern. Also, statt getSupportFragmentManager
, rufen Sie getFragmentManager
.
sdk ist mindestens 10. ActionBar" ist ab Api-Level 11 verfügbar. Für 10 würden Sie also "AppCompat" aus der Support-Bibliothek verwenden, für die Sie "Theme.AppCompat" oder einen Abkömmling desselben verwenden müssen.
Verwenden Sie
android:theme="@style/Theme.AppCompat" >
Oder wenn Sie keine Aktionsleiste am oberen Rand wünschen
android:theme="@style/Theme.AppCompat.NoActionBar">
Mehr Infos @
http://developer.android.com/guide/topics/ui/actionbar.html
Bearbeiten:
Möglicherweise habe ich den Beitrag von op falsch gelesen.
Scheint op will einen Dialog mit einem Activity Thema. Also wie bereits von Bobbake4 vorgeschlagen, erweitern Sie Activity
statt ActionBarActivity
.
Werfen Sie auch einen Blick auf die Dialog-Attribute im untenstehenden Link
HINWEIS: Ich hatte dies als eine Antwort beabsichtigt, aber weitere Tests zeigen, dass es immer noch fehlschlägt, wenn es mit Maven von der Kommandozeile aus erstellt wird, so dass ich es als Problem bearbeiten musste :-(
In meinem Fall, als ich diese Fehlermeldung erhielt, verwendete ich bereits ein AppCompat Theme und die Fehlermeldung machte nicht viel Sinn.
Ich war gerade dabei, mein Android-Build zu mavenisieren. Ich hatte bereits Abhängigkeiten von den apklib und jar Versionen von app compat, also:
<!-- See https://github.com/mosabua/maven-android-sdk-deployer -->
<dependency>
<groupId>android.support</groupId>
<artifactId>compatibility-v7-appcompat</artifactId>
<version>${compatibility.version}</version>
<type>apklib</type>
</dependency>
<dependency>
<groupId>android.support</groupId>
<artifactId>compatibility-v7-appcompat</artifactId>
<type>jar</type>
</dependency>
<dependency>
<groupId>android.support</groupId>
<artifactId>compatibility-v7</artifactId>
<type>jar</type>
</dependency>
<dependency>
<groupId>android.support</groupId>
<artifactId>compatibility-v4</artifactId>
</dependency>
Wenn ich nun das Maven-Projekt importiere und von IntelliJ aus baue und ausführe, ist alles in Ordnung.
Aber wenn ich das Projekt über die Kommandozeile mit Maven baue und ausführe, bekomme ich immer noch diese Ausnahme.