升级到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); } }