我使用AndroidStudio3.0Canary4运行我的应用程序很好,但是在更新到Canary5之后,应用程序现在崩溃了,首先是:
Caused by: java.lang.IllegalArgumentException: AppCompat does not support the current theme features: { windowActionBar: false, windowActionBarOverlay: false, android:windowIsFloating: false, windowActionModeOverlay: false, windowNoTitle: false }
at android.support.v7.app.AppCompatDelegateImplV9.createSubDecor(AppCompatDelegateImplV9.java:474)
at android.support.v7.app.AppCompatDelegateImplV9.ensureSubDecor(AppCompatDelegateImplV9.java:328)
at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:289)
at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140)
at com.bleachr.fan_engine.activities.BaseActivity.setContentView(BaseActivity.java:138)
我把范围缩小到了我认为加载应用程序样式的问题。
当我将此标志设置为
windowNoTitle: false
时,异常提到true
。下面是我可以想到的相关xml行:Syel.xml:
<style name="AppTheme.Base" parent="Theme.AppCompat.Light">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="android:windowAnimationStyle">@style/WindowAnimationTransition</item>
</style>
<style name="AppTheme" parent="AppTheme.Base"/>
androidmanifest.xml文件
<application
...
android:theme="@style/AppTheme"
我不会以任何其他方式覆盖此活动的主题,因此应该是这样。
我最初的想法是不加载
windowNoTitle
,否则会在异常中记录为true
。这有道理吗?有什么想法吗?我不确定我是否/如何能再次降级到金丝雀4号。我相信我可以使用稳定的构建,但如果可能的话,我宁愿解决这个问题。
更新:我从androidmanifest中删除了
android:theme="@style/AppTheme"
,仍然得到相同的异常!注意,我在android studio中做了“invalidate and restart”选项,以及我在其他类似的堆栈溢出帖子中看到的其他内容。
另外-这里也没有v21/styles.xml或其他任何东西,如果您想知道的话。
最佳答案
您在android.enableAapt2=false
中有gradle.properties
吗?
移除它-解决问题。
看起来像是从canary 5开始,aapt1没有正确地合并样式项。我已经深入研究了AppCompatDelegateImplV9.createSubDecor
和this.mWindowNoTitle
与为样式设置的值不匹配:<item name="windowNoTitle">true</item>
// AppCompatDelegateImplV9
private ViewGroup createSubDecor() {
TypedArray a = this.mContext.obtainStyledAttributes(styleable.AppCompatTheme);
// ~~~~ERROR: false returned (ignoring value from xml)
if(a.getBoolean(styleable.AppCompatTheme_windowNoTitle, false)) {
this.requestWindowFeature(1);
}
有人在issuetracker.google.com上提出过问题吗?