错误:java.lang.IllegalStateException: You need to use a Theme.AppCompat theme
是因为AndroidManifest.xml里指定的AppCompatActivity继承类未声明:
android:theme="@style/Theme.AppCompat.Light.NoActionBar"
原因
无法引用Theme.AppCompat.Light.NoActionBar
我项目之前是能正常引用Theme.AppCompat.Light.NoActionBar主题的,但后面开发中我引用了MobTech公司的推送SDK:
classpath 'com.mob.sdk:MobSDK:+'
导致无法引用Theme.AppCompat.Light.NoActionBar
大家都知道这个主题,是在V7包里的,我项目里的V7包是:com.android.support:appcompat-v7:25.3.1。
我查看了其它项目,是能正常使用Theme.AppCompat.Light.NoActionBar的,最终发现是:
classpath 'com.mob.sdk:MobSDK:+'导致的问题。
尝试注释掉 sdk后,立马就正常了。
下面是v7包的引导截图
不能调用主题的
正常调用主题的
从上面可以看出,引导库被改变了,但V7包里的类可以调用,就是styles无法调用。
解决
我百度了很久,在网上查了各种网站都没解决。
最终查看源码找到解决办法。
如果不设置主题,调用AppCompatActivity的继承类会报错:
You need to use a Theme.AppCompat theme (or descendant) with this activity.
v7中的AppCompatActivity的AppCompatDelegateImplV9(该类不同的V7版本包导致不同)源码里:
if (!a.hasValue(R.styleable.AppCompatTheme_windowActionBar)) {
a.recycle();
throw new IllegalStateException(
"You need to use a Theme.AppCompat theme (or descendant) with this activity.");
}
从代码上可以看出来,只强制要求有主题,只要给他一个有效的主题就行(不要尝试自己写有点麻烦,我反正没成功)。
我尝试把V7包里的values.xml拷贝自己的app里的values目录里改名为values2.xml。
最后问题解决,重新运行项目能正常使用。