1220 Stimmen

Du musst ein Theme.AppCompat-Thema (oder Abkömmling) 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 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 ihr Theme auf Theme.Holo.Dialog im the Manifestelement:

Allerdings erhalte ich bei meinem Versuch die folgende Ausnahme:

java.lang.IllegalStateException: Sie müssen ein Theme.AppCompat-Thema (oder Nachfolger) für diese Aktivität verwenden

Ich unterstütze das Folgende, und ich kann nichts Größeres als 10 für das Minimum verwenden:

minSdkVersion 10
targetSdkVersion 19

In meinen Styles habe ich das Folgende:

</code></pre>

<p>Und in meinem Manifest habe ich dies für die Aktivität:</p>

<pre><code> <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>
</code></pre>

<p>Die Erstellung des Dialogfelds auf diese Weise war etwas, was ich gerne machen wollte, da das Layout bereits abgeschlossen ist.</p>

<p>Kann mir jemand sagen, wie ich dieses Problem umgehen kann?</p></x-turndown>

1223voto

Bobbake4 Punkte 24174

Der Grund, warum Sie dieses Problem haben, liegt darin, dass die Aktivität, auf die Sie das Dialogdesign anwenden möchten, ActionBarActivity erweitert, was erfordert, dass das AppCompat-Design angewendet wird.

Update: Eine Erweiterung von AppCompatActivity würde dieses Problem auch haben

In diesem Fall ändern Sie die Java-Vererbung von ActionBarActivity auf Activity und lassen Sie das Dialogdesign im Manifest wie es ist, einen Wert, der kein Theme.AppCompat ist


Die allgemeine Regel besagt, dass wenn Sie möchten, dass Ihr Code ältere Versionen von Android unterstützt, sollte er das AppCompat-Design haben und der Java-Code sollte AppCompatActivity erweitern. Wenn Sie eine Aktivität haben, die diese Unterstützung nicht benötigt, zum Beispiel wenn Sie sich nur um die neuesten Versionen und Funktionen von Android kümmern, können Sie jedes Design darauf anwenden, aber der Java-Code muss die gute alte Activity erweitern.


HINWEIS: Beim Wechsel von AppCompatActivity (oder einer Unterklasse, ActionBarActivity), zu Activity, müssen auch die verschiedenen Aufrufe mit "Support" auf den entsprechenden Aufruf ohne "Support" geändert werden. Anstatt also getSupportFragmentManager, rufen Sie getFragmentManager auf.

652voto

iusting Punkte 7326

Alles, was Sie tun müssen, ist android:theme="@style/Theme.AppCompat.Light" zum Anwendungstag in der AndroidManifest.xml Datei hinzuzufügen.

318voto

A.K. Punkte 3495

Kopieren der Antwort von @MarkKeen in den obigen Kommentaren, da ich das gleiche Problem hatte.

Ich hatte den oben im Beitrag angegebenen Fehler und er trat auf, nachdem ich einen Alertdialog hinzugefügt hatte. Ich habe alle relevanten Style-Informationen im Manifest. Mein Problem wurde durch Ändern eines Kontextverweises im Alert Builder behoben - ich habe geändert:

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

zu:

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

Und keine Probleme mehr.

155voto

Darush Punkte 10393

Wenn Sie den Anwendungskontext verwenden, etwa so:

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

ändere es zu einem Aktivitätskontext wie hier:

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

129voto

Raghunandan Punkte 131351

Mindest-SDK ist 10. ActionBar ist ab API-Ebene 11 verfügbar. Für 10 müssten Sie also AppCompat aus der Support-Bibliothek verwenden, für die Sie Theme.AppCompat oder ein Nachfolger benötigen.

Verwenden Sie

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

Oder wenn Sie keine Aktionsleiste oben wollen

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

Weitere Informationen @

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

Bearbeitet:

Vielleicht habe ich den Beitrag des Starters falsch gelesen.

Es scheint, als ob der Starter ein Dialog mit einem Activity-Theme möchte. Wie bereits von Bobbake4 vorgeschlagen, erweitern Sie also Activity anstelle von ActionBarActivity.

Schauen Sie sich auch die Dialogattribute im 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/

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X