Sie müssen ein Theme.AppCompat-Thema (oder einen Abkömmling davon) mit dieser Aktivität verwenden

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?

Lösung

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.

Kommentare (25)

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

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.4_r1/frameworks/base/core/res/res/values/themes.xml/

Kommentare (8)

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:



            android.support
            compatibility-v7-appcompat
            ${compatibility.version}
            apklib



            android.support
            compatibility-v7-appcompat
            jar



            android.support
            compatibility-v7
            jar



            android.support
            compatibility-v4

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.

Kommentare (0)