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, которая требует другой версии Android API? - Хотя Android Studio любит рассказывать вам об этих вещах ... Goodluck
Gready
опубликуйте свой theme.xml или style.xml и activity_main.xml
Charaf Eddine Mechalikh
Можете ли вы также поместить сюда свои файлы .gradle? Вы, наверное, зависите от старого appcompat?
RaphMclee

Ответы:

233

альтернатива ответу @sbaar,

держать windowActionBarв falseи добавить windowNoTitleтакже и установить его true.

т.е.

   <item name="windowActionBar">false</item>
   <item name="windowNoTitle">true</item>
SteelBytes
источник
4
Мне пришлось сделать это со своим приложением после обновления до последней версии appcompt (22.1) сегодня. это все, что я изменил, и теперь мое приложение снова работает.
SteelBytes
4
это странно, но работает после переключения ActionBarActivity -> AppCompatActivity
pawegio
5
Этот ответ не сработал для меня. Только ответ @sbaar работал. Ваша тема должна унаследовать от: Theme.AppCompat.NoActionBar в дополнение к тем: <item name = "windowActionBar"> false </item> и <item name = "windowNoTitle"> true </item>
blueware
1
Это работает для тем, у которых нет альтернативы по NoActionBarстилю. В моем примере это работает дляTheme.AppCompat.Light.Dialog
dobridog
1
Это работает при наследовании от Theme.AppComapt.NoActionBar. Отлично!
Tariq
41

удалять

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

из вашей темы, затем убедитесь, что вы наследуете тему .NoActionBar, а затем установите панель инструментов как обычно.

sbaar
источник
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.

Ангграюди H
источник
@QadirHussain, нет, не было.
Anggrayudi H
AppCompat.NoActionBar заставил весь мой белый цвет textView использовать Theme.AppCompat.Light.NoActionBar вместо
Хитеш Саху,
Все еще не работает stackoverflow.com/questions/45643107/…
Ручир Барония
16

Проверьте, звоните ли вы setContentView()после super.onCreate(), а не раньше. В моем случае это помогло.

Wilddev
источник
Имел windowNoTitle и windowActionBar, но все равно не работал. Это исправило это для меня. Спасибо!
авб
5

Используйте этот родительский элемент в Style.xml parent = "Theme.AppCompat.Light.NoActionBar"

Атриведи
источник
1
Спасибо за ответ. :)
Кавиш Канвал 07
3

в моем случае я не перешел на тему .NoActionBar. я просто удаляю приставку android из этого элемента.

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

и ошибка уходит.

SetMax
источник
не упоминай об этом. рад видеть ваш комментарий.
Setmax
3

Удостоверься что

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

на вершине всего, что у меня работает .... удачи

rewrihitesh
источник
1

добавить зависимость к Gradle, как это

compile 'com.android.support:appcompat-v7:21.0.3'
Саураб Чандра Патель
источник
1

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

russellhoff
источник
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>
BENN1TH
источник
0

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

Gail
источник
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

В классе Java измените Main extends ActionBarActivityна Main extends Activity. У меня это сработало.

شبير البلوشي
источник
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>

решить проблему.


источник