java.lang.IllegalArgumentException: AppCompat не підтримує поточні функції теми


109

Я намагався перенести проект із Eclipse в студію Android. Нарешті, я можу це запустити, але в певний момент я отримав цей виняток, і я не знайшов нічого в Google про це:

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. рядок MainActivity:

setContentView(R.layout.activity_main);

Будь ласка, порадьте мене, якщо можете.


Ніколи цього не бачив, але, можливо, ви використовуєте функцію в R.layout.activity_main, для якої потрібна інша версія API Android? - Хоча Android Studio любить розповідати вам про ці речі ... Goodluck
Gready

опублікуйте свою topic.xml або style.xml та activity_main.xml
Charaf Eddine Mechalikh

Чи можете ви також помістити сюди свої файли .gradle? Ви, мабуть, залежите від старого додатка?
RaphMclee

Відповіді:


233

альтернатива відповіді @ sbaar,

тримати windowActionBarв falseі додати windowNoTitleтакож і встановити його true.

тобто

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

4
Мені довелося це зробити у своєму додатку після оновлення до останньої програми сьогодні (22.1). це все, що я змінив, і моя програма зараз працює знову.
SteelBytes

4
це дивно, але працює після переключення ActionBarActivity -> AppCompatActivity
pawegio

5
Ця відповідь не спрацювала для мене. Лише відповідь @sbaar працювала. Ваша тема повинна успадковуватись із: Theme.AppCompat.NoActionBar, крім таких: <item name = "windowActionBar"> false </item> та <item name = "windowNoTitle"> true </item>
блюверр

1
Це працює для тем, які не мають альтернативи NoActionBarстилю. У моєму прикладі це працюєTheme.AppCompat.Light.Dialog
dobridog

1
Це працює при успадкуванні від Theme.AppComapt.NoActionBar. Ідеально!
Тарік

41

Видалити

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

від теми, переконайтеся, що ви успадковуєте тему .NoActionBar, а потім встановіть панель інструментів як звичайну.


1
І навіщо мені щось змінювати? Цей проект місяцями добре поєднувався з затемненням.
Адам Варгегій

3
Тому що кілька годин тому Google випустила їх версію 22.1 бібліотеки підтримки, що спричинило цю проблему у вашому проекті (і в моєму). Це просто збіг, а не через перехід на Android Studio.
jmart

3
Для мене наслідування теми від .NoActionBar було ключовим, не потрібно було видаляти елементи.
Сергій Алдухов

30

Переконайтеся, що ваша тема є дочірньою Theme.AppCompat.NoActionBar, а потім styles.xml:

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

До речі, це новий випуск для Бібліотеки підтримки 22.1.


@QadirHussain, Ні, ні.
Anggrayudi H

AppCompat.NoActionBar зробив все мої TextView колір білий використання Theme.AppCompat.Light.NoActionBar замість
Hitesh Sahu

Чи не працює до цих пір stackoverflow.com/questions/45643107 / ...
Ruchir Baronia

16

Перевірте, чи телефонуєте ви setContentView()після super.onCreate(), а не раніше. Це допомогло в моєму випадку.


Були windowNoTitle та windowActionBar, але все ще не працювали. Це зафіксувало це для мене. Дякую!
avb


3

у моєму випадку я не змінився на .NoActionBar Theme. я просто видаляю з цього елемента префікс Android.

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

і помилка відходить.


не згадуйте про це. рада бачити ваш коментар.
Setmax

3

Переконайтеся, що

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

знаходяться на вершині всього, що це працює для мене .... удачі



1

Я вирішив цю проблему за допомогою моєї основної діяльності, що розширює AppCompatActivity :)


1

У android:мене така ж проблема була дещо видалена з syles.xml, як показано нижче;

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

У мене була така ж проблема, коли я оновив версію бібліотеки з 22.0.0 до 22.1.1 і виправив її, повернувшись до попередньої версії: com.android.support:appcompat-v7:22.0.0 і повернусь до використання ActionBarActivity, не AppCompatActivity в моїх класах діяльності, як того вимагає новіша версія бібліотеки сумісності. Спробую пізніше.


0

просто Використовуйте це у вашому style.xml іншого редагування не потрібно

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

не додайте нічого у файл активності, залиште його

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

У моєму випадку я шукаю відповідь @rewrihitesh, і помічаю, що я перевернув елементи порядку . Зміна від

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

до

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

Виправити мою проблему.

Сподіваюся, це допомагає !!


0

якщо ви додали <item name="windowActionBar">false</item>, значить, вам потрібно додати

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

для вирішення проблеми.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.