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.