Frage Sie müssen ein Theme.AppCompat-Thema (oder einen Nachkommen) mit dieser Aktivität verwenden


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 verwenden 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 legen Sie ihr Thema auf Theme.Holo.Dialog in das <activity> manifestiertes Element:

<activity android:theme="@android:style/Theme.Holo.Dialog" >

Wenn ich dies jedoch versuchte, erhalte 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 etwas Größeres als 10 für das Min 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 der Dialogbox war etwas, das ich zu tun hatte, da ich das Layout bereits fertiggestellt habe.

Kann mir jemand sagen, wie ich dieses Problem umgehen kann?


770
2018-02-16 17:34


Ursprung


Antworten:


Der Grund für dieses Problem liegt darin, dass die Aktivität, auf die Sie das Dialogfeldthema anwenden möchten, erweitert wird ActionBarActivity was erfordert die AppCompat Thema angewendet werden.

Aktualisieren: Erweitern AppCompatActivity hätte auch dieses Problem

Ändern Sie in diesem Fall die Java-Vererbung von ActionBarActivity zu Activity und belasse das Dialogthema im Manifest, so wie es ist, ein Non Theme.AppCompat Wert


Die allgemeine Regel lautet: Wenn Sie möchten, dass Ihr Code ältere Versionen von Android unterstützt, sollte er das haben AppCompat Thema und der Java-Code sollte erweitern AppCompatActivity. Wenn Sie * eine Aktivität haben, die diese Unterstützung nicht benötigt, so wie Sie sich nur für die neuesten Versionen und Funktionen von Android interessieren, können Sie ein beliebiges Thema darauf anwenden, aber der Java-Code muss einfach alt werden Activity.


HINWEIS: Beim Wechsel von AppCompatActivity (oder eine Unterklasse, ActionBarActivity), zu Activity, müssen auch die verschiedenen Anrufe mit "support" auf den entsprechenden Anruf umstellen ohne "Unterstützung". Also, statt getSupportFragmentManager, Anruf getFragmentManager.


974
2018-02-16 17:48



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


463
2017-09-04 10:44



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

Ich hatte den Fehler oben auf dem Post angegeben und passierte, nachdem ich einen Warndialog hinzugefügt hatte. Ich habe alle relevanten Stilinformationen im Manifest. Mein Problem wurde durch Ändern einer Kontextreferenz im Alert-Builder behoben - ich habe Folgendes geändert:

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

zu:

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

Und keine Probleme mehr.


164
2017-09-03 10:43



min sdk ist 10. ActionBar ist verfügbar von api level 11. Also für 10 würden Sie verwenden AppCompat aus der Support-Bibliothek, für die Sie verwenden müssen Theme.AppCompat oder Nachkomme desselben.

Benutzen

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

Oder wenn Sie keine Aktionsleiste oben haben wollen

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

Mehr Info @

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

Bearbeiten:

Ich könnte Op-Post falsch gelesen haben.

Scheint, will einen Dialog mit einem Aktivitätsthema. Also wie schon von Bobbake4 vorgeschlagen erweitert Activity Anstatt von ActionBarActivity.

Sehen Sie sich auch @ Dialog Attribute 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/


82
2018-02-16 17:36



Das hat bei mir funktioniert, ich habe gerade geändert:

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

zu diesem:

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

61
2017-10-21 20:27



Ich hatte dieses Problem, obwohl mein Theme ein war AppCompat Thema und meine Aktivität war ein AppCompatActivity (oder Activity, wie in den Antworten anderer vorgeschlagen). Also habe ich das Projekt gereinigt, neu aufgebaut und erneut ausgeführt.

(Bauen -> Sauberes Projekt; Erstellen -> Projekt neu erstellen; Ausführen -> Ausführen)

Es mag dumm erscheinen, aber jetzt funktioniert super!

Hoffe es hilft nur!


30
2018-04-29 05:10



Das hat es für mich behoben: Anstatt das Thema in Manifest zu spezifizieren, habe ich es in definiert onCreate für jede Aktivität, die sich erstreckt ActionBarActivity:

@Override
protected void onCreate(Bundle savedInstanceState) {
    setTheme(R.style.MyAppTheme);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.my_activity_layout);
...
}

Hier MyAppTheme ist ein Nachkomme von Theme.AppCompatund ist in XML definiert. Beachten Sie, dass das Thema zuvor festgelegt werden muss super.onCreate und setContentView.


22
2018-01-14 21:37



Gehe zu deinen Stilen und setze die Eltern

parent="Theme.AppCompat"

Anstatt von

parent="@android:style/Theme.Holo.Light"

17
2017-12-03 10:45