升级到AppCompat v22.1.0,现在得到IllegalArgumentException:AppCompat不支持当前的主题function

我刚刚升级我的应用程序使用新发布的v22.1.0 AppCompat,我现在得到以下exception,当我打开我的应用程序。

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) 

我该如何解决?

AppCompat现在对主题窗口标志的期望更为严格,与您从框架中获得的更匹配。

这背后的主要原因是支持我们也在这个版本中添加的AppCompatDialogs 。 他们大量使用了windowNoTitle标志,AppCompat以前并没有太在意。

所以要解决你的问题,你有两个select:

简单的方法是使用Theme.AppCompat.NoActionBar作为您的父主题。 这将永远做正确的事情。

如果你不能这样做(也许你需要支持操作栏和没有操作栏),你应该做到以下几点:

 <style name="MyTheme" parent="Theme.AppCompat"> ... </style> <style name="MyTheme.NoActionBar"> <!-- Both of these are needed --> <item name="windowActionBar">false</item> <item name="windowNoTitle">true</item> </style> 

你现在应该回到正轨。

那些在所有这些修复之后仍然出现错误的人。

请inheritance

 Theme.AppCompat.Light.NoActionBar 

不要使用

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

那么,你不会得到任何错误。

我补充说

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

但还不够。 最后,移动super.onCreate之前在活动setContentView – 解决了我的问题:)

  public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.v2_main_dash); ... 

只需在values-v21文件夹的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); } }