java.lang.IllegalArgumentException:AppCompat不支持当前的主题功能


109

我试图将项目从Eclipse迁移到Android Studio。终于我可以运行它了,但是在某个时候我遇到了这个异常,我在谷歌上没有发现任何有关此的信息:

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

您也可以将.gradle文件放在这里吗?您可能依赖于旧的appcompatpat?
RaphMclee 2015年

Answers:


233

替代@sbaar的答案,

保持windowActionBarfalse并加入windowNoTitle以及和它设置为true

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

4
今天更新到最新的appcompt(22.1)之后,我必须对我的应用程序执行此操作。这就是我所做的全部更改,并且我的应用现在可以再次使用。
SteelBytes 2015年

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继承时,此方法有效。完善!
塔里克,2015年

41

去掉

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

从您的主题开始,然后确保您从.NoActionBar主题继承,然后将工具栏设置为普通。


1
为什么我要修改一个东西?这个项目用eclipse运行了好几个月。
亚当·瓦赫吉

3
因为几个小时前,Google发布了其支持库的22.1版本,从而在您的项目(以及我的项目)中引起了此问题。这只是一个巧合,而不是因为迁移到Android Studio。
jmart 2015年

3
对我而言,从.NoActionBar继承主题是关键,不需要删除任何元素。
Sergey Aldoukhov

30

确保您的主题是来自 Theme.AppCompat.NoActionBar,然后在中styles.xml

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

顺便说一句,这是支持库22.1的新问题。


@QadirHussain,不,不是。
Anggrayudi H 2015年

AppCompat.NoActionBar使我所有的textView颜色变为白色,而是使用Theme.AppCompat.Light.NoActionBar
Hitesh Sahu


16

检查您是否setContentView()在之后致电super.onCreate(),而不是之前致电。这对我来说很有帮助。


有windowNoTitle和windowActionBar,但仍然无法正常工作。这为我解决了。谢谢!
2015年


3

就我而言,我没有更改为.NoActionBar主题。我只是从此项目中删除android前缀。

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

错误消失了。


不要提及它。很高兴看到您的评论。
Setmax 2015年

3

确保

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

一切对我有用。




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,兼容性库的较新版本所要求的,而不是我的Activity类中的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答案,并且注意到我颠倒了element order。从改变

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>

解决问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.