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>

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, а затем установите панель инструментов как обычно.


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 вместо
Хитеш Саху,


16

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


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


3

в моем случае я не перешел на тему .NoActionBar. я просто удаляю приставку 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 в моих классах Activity, как того требует более новая версия библиотеки совместимости. Попробую позже.


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.