java.lang.IllegalArgumentException: AppCompat non supporta le funzionalità del tema corrente


109

Ho provato a migrare un progetto da Eclipse ad Android Studio. Finalmente sono in grado di eseguirlo, ma a un certo punto ho avuto questa eccezione e non ho trovato nulla su Google su questo:

04-22 00:08:15.484    9891-9891/hu.illion.kwindoo E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{hu.illion.kwindoo/hu.illion.kwindoo.activity.MainActivity}: java.lang.IllegalArgumentException: AppCompat does not support the current theme features
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2092)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2117)
    ...    
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)
    at hu.illion.kwindoo.activity.MainActivity.onCreate(MainActivity.java:73)
    at android.app.Activity.performCreate(Activity.java:5047)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2056)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2117)
    ...

73. la linea di MainActivity è:

setContentView(R.layout.activity_main);

Per favore, avvisami se puoi.


Non l'hai mai visto ma forse stai usando una funzionalità in R.layout.activity_main che richiede una versione diversa dell'API Android? - Anche se ad Android Studio piace
— parlarti

pubblica il tuo theme.xml o style.xml e activity_main.xml
— Charaf Eddine Mechalikh

Puoi mettere anche i tuoi file .gradle qui? Probabilmente dipendi da una vecchia appcompat?
— RaphMclee

Risposte:


233

alternativa alla risposta di @ sbaar,

tenere windowActionBara falsee aggiungere windowNoTitlepure e impostarlo true.

vale a dire

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

4
Ho dovuto eseguire questa operazione sulla mia app dopo l'aggiornamento all'ultima appcompt (22.1) oggi. è tutto ciò che ho cambiato e la mia app ora funziona di nuovo.
— SteelBytes

4
è strano, ma funziona dopo aver cambiato ActionBarActivity -> AppCompatActivity
— pawegio

5
Questa risposta non ha funzionato per me. Solo la risposta di @sbaar ha funzionato. Il tuo tema dovrebbe ereditare da: Theme.AppCompat.NoActionBar oltre a quelli: <item name = "windowActionBar"> false </item> e <item name = "windowNoTitle"> true </item>
— blueware

1
Questo funziona per temi che non hanno un'alternativa nello NoActionBarstile. Nel mio esempio funziona perTheme.AppCompat.Light.Dialog
— dobridog

1
Funziona quando si eredita da Theme.AppComapt.NoActionBar. Perfetto!
— Tariq

41

Rimuovere

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

dal tuo tema, quindi assicurati di ereditare da un tema .NoActionBar, quindi imposta la barra degli strumenti come al solito.


1
E perché dovrei modificare una cosa? Questo progetto è andato molto bene con Eclipse per mesi.
— Adam Varhegyi

3
Perché alcune ore fa Google ha rilasciato la sua versione 22.1 della libreria di supporto, causando questo problema nel tuo progetto (e anche nel mio). È solo una coincidenza, non a causa della migrazione ad Android Studio.
— jmart

3
Per me, ereditare il tema da .NoActionBar era la chiave, non era necessaria la rimozione di elementi.
— Sergey Aldoukhov

30

Assicurati che il tuo tema sia figlio di Theme.AppCompat.NoActionBar, quindi in styles.xml:

<style name="MyMaterialTheme" parent="Theme.AppCompat.NoActionBar">
        <item name="windowNoTitle">true</item>
        ...
</style>

A proposito, è un nuovo problema per Support Library 22.1.


@QadirHussain, No, non l'ha fatto.
— Anggrayudi H

AppCompat.NoActionBar ha reso tutto il mio textView colore bianco utilizzare Theme.AppCompat.Light.NoActionBar invece
— Hitesh Sahu


16

Controlla se chiami setContentView()dopo super.onCreate()e non prima. Questo ha aiutato nel mio caso.


Aveva windowNoTitle e windowActionBar ma ancora non funzionava. Questo ha risolto il problema per me. Grazie!
— avb


3

nel mio caso non sono passato al tema .NoActionBar. Ho appena rimosso il prefisso Android da questo articolo.

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

e l'errore scompare.


non parlarne. felice di vedere il tuo commento.
— Setmax

3

Assicurati che

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

sono in cima a tutto ciò che funziona per me .... buona fortuna



1

Ho risolto il problema con la mia attività principale estendendo AppCompatActivity :)


1

Ho avuto lo stesso problema in qualche modo, rimosso android:dal mio syles.xml come di seguito;

 <!-- caused crash -->
 <item name="android:windowActionBar">false</item>
 <item name="android:windowNoTitle">true</item>

 <!-- didn't cause crash -->
 <item name="windowActionBar">false</item>
 <item name="windowNoTitle">true</item>

0

Ho avuto lo stesso problema quando ho aggiornato la versione della libreria da 22.0.0 a 22.1.1 e l'ho risolto tornando alla versione precedente: com.android.support:appcompat-v7:22.0.0 e sono tornato a utilizzare ActionBarActivity, non AppCompatActivity nelle mie classi Activity come richiesto dalla versione più recente della libreria di compatibilità. Riproverò più tardi.


0

basta usarlo nel tuo style.xml non sono necessarie altre modifiche

 <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>

non aggiungere nulla al file delle attività per favore lascialo

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);
}

 }


0

Nel mio caso, cerco la risposta @rewrihitesh e noto che ho invertito l'ordine degli elementi . Cambiando da

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

per

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

Risolvi il mio problema.

Spero che sia d'aiuto !!


0

se hai aggiunto <item name="windowActionBar">false</item>, allora, devi aggiungere

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

per risolvere il problema.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.