Auf AppCompat v22.1.0 aktualisiert und jetzt mit IllegalArgumentException: AppCompat unterstützt die aktuellen Designfunktionen nicht

Lesezeit: 4 Minuten

Auf AppCompat v2210 aktualisiert und jetzt mit IllegalArgumentException AppCompat unterstutzt
Chris Banes

Ich habe gerade meine App aktualisiert, um die neu veröffentlichte Version 22.1.0 von AppCompat zu verwenden, und ich erhalte jetzt die folgende Ausnahme, wenn ich meine App öffne.

Caused by: java.lang.IllegalArgumentException: AppCompat does not support the current theme features
        at android.support.v7.app.AppCompatDelegateImplV7.ensureSubDecor(AppCompatDelegateImplV7.java:360)
        at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:246)
        at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:106)

Wie kann ich es beheben?

Auf AppCompat v2210 aktualisiert und jetzt mit IllegalArgumentException AppCompat unterstutzt
Chris Banes

AppCompat ist jetzt strenger in Bezug auf das, was es in Themenfenster-Flags erwartet, und passt besser zu dem, was Sie vom Framework erhalten würden.

Der Hauptgrund dafür ist die Unterstützung AppCompatDialogs die wir auch in dieser Version hinzugefügt haben. Sie machen starken Gebrauch von der windowNoTitle Flag, dem AppCompat zuvor nicht viel Aufmerksamkeit geschenkt hat.

Um Ihr Problem zu beheben, haben Sie also zwei Möglichkeiten:

Der einfache Weg ist, einfach zu verwenden Theme.AppCompat.NoActionBar als übergeordnetes Thema. Dies wird immer das Richtige tun.

Wenn Sie dies jedoch nicht tun können (möglicherweise müssen Sie die Aktionsleiste und keine Aktionsleiste unterstützen), sollten Sie Folgendes tun:

<style name="MyTheme" parent="Theme.AppCompat">
    ...
</style>

<style name="MyTheme.NoActionBar">
    <!-- Both of these are needed -->
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>

Du solltest jetzt wieder auf Kurs sein.

  • Diese Informationen sollten besser in den Appcompat-Versionshinweisen stehen 😉

    – Veaceslav Gaidarji

    22. April 2015 um 12:20 Uhr

  • Wenn jemand feststellt, dass nach dem Ausprobieren beider Optionen die Ausnahme weiterhin besteht, stellen Sie sicher, dass Ihre Aktivität setContentView nach super.onCreate aufruft, nicht vorher. Ich habe es zuvor für andere Zwecke aufgerufen, aber ich musste es ändern, um den Fehler zu vermeiden.

    – jmart

    22. April 2015 um 17:49 Uhr

  • In meinem Fall musste ich true, das ich zuvor definiert hatte, in true ändern, um die Ausnahme zu beseitigen.

    – Gemeiner Mann

    23. April 2015 um 12:29 Uhr

  • @ChrisBanes: Sie haben bei Google mit Android gearbeitet – vielleicht können Sie das Team davon überzeugen, in Zukunft ausführlichere Versionshinweise zu veröffentlichen. Auf diese Weise können Android-Entwickler Fehler mit Android-Designfunktionen selbst beheben, anstatt zur Kompilierzeit auf die Fehler zu stoßen.

    Benutzer4750643

    23. April 2015 um 16:13 Uhr


  • Beachten Sie, dass Sie diese Änderung wahrscheinlich sowohl in der Haupt-XML-Datei für Stile/Designs als auch in der v21-Version vornehmen müssen. Hast mich erwischt.

    – rfay

    23. April 2015 um 19:29 Uhr

1646257387 653 Auf AppCompat v2210 aktualisiert und jetzt mit IllegalArgumentException AppCompat unterstutzt
Adnan

Diejenigen, die nach all diesen Fixes immer noch Fehler bekommen.

Bitte erben von

Theme.AppCompat.Light.NoActionBar

und nicht verwenden

<item name="windowActionBar">false</item>

Dann erhalten Sie keinen Fehler.

  • Tolle Antwort +1

    – sandeepmaaram

    23. Februar 2017 um 14:32 Uhr

Ich fügte hinzu

<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>

aber es war nicht genug. Schließlich das Verschieben von super.onCreate vor setContentView in Aktivität – mein Problem wurde behoben 🙂

   public void onCreate(Bundle savedInstanceState) {    

        super.onCreate(savedInstanceState);    
        setContentView(R.layout.v2_main_dash);
        ...

  • Zum Glück habe ich Ihre Antwort gefunden, setContentView nach onCreate zu verschieben, ich habe einen halben Tag damit zu kämpfen …

    – Oliv

    25. April 2016 um 13:01 Uhr

Auf AppCompat v2210 aktualisiert und jetzt mit IllegalArgumentException AppCompat unterstutzt
Ribin Haridas

Verwenden Sie dies einfach in Ihrem style.xml im Ordner values-v21 ist keine weitere Bearbeitung erforderlich

 <style name="AppTheme" parent="Theme.AppCompat">

    <!-- theme customizations -->

   <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
 </style>

Fügen Sie nichts zur Aktivitätsdatei hinzu, sondern belassen Sie es

public class Main extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

916420cookie-checkAuf AppCompat v22.1.0 aktualisiert und jetzt mit IllegalArgumentException: AppCompat unterstützt die aktuellen Designfunktionen nicht

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy