java.lang.IllegalArgumentException: AppCompat nie obsługuje obecnych funkcji motywu

109

Próbowałem przenieść projekt z Eclipse do studia Android. W końcu mogę go uruchomić, ale w pewnym momencie dostałem ten wyjątek i nie znalazłem w Google nic na ten temat:

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. linia MainActivity to:

setContentView(R.layout.activity_main);

Proszę o poradę, jeśli potrafisz.

Adam Varhegyi
źródło
Nigdy tego nie widziałem, ale być może używasz funkcji w R.layout.activity_main, która wymaga innej wersji interfejsu API systemu Android? - Chociaż Android Studio lubi opowiadać o tych rzeczach ... Goodluck
Gready
opublikuj swój theme.xml lub style.xml i activity_main.xml
Charaf Eddine Mechalikh
Czy możesz umieścić tutaj swoje pliki .gradle? Prawdopodobnie polegasz na starym appcompatie?
RaphMclee

Odpowiedzi:

233

alternatywa dla odpowiedzi @ sbaar,

trzymać windowActionBarsię falsei dodać windowNoTitletakże i ustawić go true.

to znaczy

   <item name="windowActionBar">false</item>
   <item name="windowNoTitle">true</item>
SteelBytes
źródło
4
Musiałem to zrobić w mojej aplikacji po dzisiejszej aktualizacji do najnowszej wersji appcompt (22.1). to wszystko, co zmieniłem i moja aplikacja znów działa.
SteelBytes
4
to dziwne, ale działa po przełączeniu ActionBarActivity -> AppCompatActivity
pawegio Kwietnia
5
Ta odpowiedź mi nie odpowiada. Tylko odpowiedź @sbaar działała. Twój motyw powinien dziedziczyć z: Theme.AppCompat.NoActionBar oprócz tych: <item name = "windowActionBar"> false </item> i <item name = "windowNoTitle"> true </item>
blueware
1
Działa to w przypadku motywów, które nie mają alternatywy w NoActionBarstylu. W moim przykładzie to działaTheme.AppCompat.Light.Dialog
dobridog
1
Działa to w przypadku dziedziczenia z Theme.AppComapt.NoActionBar. Idealny!
Tariq
41

Usunąć

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

z motywu, a następnie upewnij się, że dziedziczysz z motywu .NoActionBar, a następnie ustaw pasek narzędzi tak, jak zwykle.

sbaar
źródło
1
A dlaczego powinienem coś modyfikować? Ten projekt był bardzo dobry z zaćmieniem przez wiele miesięcy.
Adam Varhegyi
3
Ponieważ kilka godzin temu Google wydało wersję 22.1 biblioteki wsparcia, powodując ten problem w Twoim projekcie (i moim również). To tylko zbieg okoliczności, a nie migracja do Android Studio.
jmart
3
Dla mnie kluczem było dziedziczenie motywu z .NoActionBar, nie było potrzeby usuwania elementu.
Sergey Aldoukhov
30

Upewnij się, że Twój motyw pochodzi od Theme.AppCompat.NoActionBar, a następnie w styles.xml:

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

Przy okazji, jest to nowy numer dla Support Library 22.1.

Anggrayudi H
źródło
@QadirHussain, nie, nie.
Anggrayudi H
AppCompat.NoActionBar wykonany cały mój kolor biały TextView korzystanie Theme.AppCompat.Light.NoActionBar zamiast
Hitesh Sahu
Nie działa nadal stackoverflow.com/questions/45643107/ ...
Ruchir Baronia
16

Sprawdź, czy dzwonisz setContentView()później super.onCreate(), a nie wcześniej. To pomogło w moim przypadku.

wilddev
źródło
Miał windowNoTitle i windowActionBar, ale nadal nie działał. To naprawiło to dla mnie. Dzięki!
avb
3

w moim przypadku nie zmieniłem motywu na .NoActionBar. po prostu usuwam prefiks Androida z tej pozycji.

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

i błąd znika.

Setmax
źródło
nie wspominaj o tym. cieszę się z twojego komentarza.
Setmax
3

Upewnić się, że

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

są na szczycie wszystkiego, co działa dla mnie ... powodzenia

rewrihitesh
źródło
1

dodaj zależność do gradle w ten sposób

compile 'com.android.support:appcompat-v7:21.0.3'
Saurabh Chandra Patel
źródło
1

Rozwiązałem problem przez moje główne działanie rozszerzające AppCompatActivity :)

russellhoff
źródło
1

Miałem nieco ten sam problem, usunięty android: z mojego pliku syles.xml zgodnie z poniższym;

 <!-- 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>
BENN1TH
źródło
0

Miałem ten sam problem, gdy zaktualizowałem wersję biblioteki z 22.0.0 do 22.1.1 i naprawiłem go, wracając do poprzedniej wersji: com.android.support:appcompat-v7:22.0.0 i wracając do używania ActionBarActivity, nie AppCompatActivity w moich klasach Activity, zgodnie z wymaganiami nowszej wersji biblioteki zgodności. Spróbuję później.

Gail
źródło
0

po prostu użyj tego w swoim style.xml, żadna inna edycja nie jest potrzebna

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

nie dodawaj niczego do pliku aktywności, zostaw to

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

 }
Ribin Haridas
źródło
0

W klasie Java zmień Main extends ActionBarActivityna Main extends Activity. U mnie to zadziałało.

شبير البلوشي
źródło
0

W moim przypadku szukam odpowiedzi @rewrihitesh i zauważam, że odwróciłem kolejność elementów . Zmiana z

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

do

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

Rozwiąż mój problem.

Mam nadzieję, że to pomoże !!

Gueorgui Obregon
źródło
0

jeśli dodałeś <item name="windowActionBar">false</item>, musisz dodać

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

rozwiązać problem.


źródło