<activity android:name=".XXXXActivity"
android:exported="true"
android:launchMode="singleTop"
android:screenOrientation="portrait"
android:configChanges="orientation|keyboardHidden|screenSize"
android:theme="@android:style/Theme.Translucent"/>
<activity android:name=".MainActivity">
设置主题的
@android:style/Theme.Translucent
报错
java.lang.IllegalStateException: You need to use a Theme.AppCompat
theme (or descendant) with this activity.
看着错误提示是@android:style/Theme.Translucent不属于 Theme.AppCompat theme
解决方式:
当前的
MyActivity extends AppCompatActivity
修改为
MyActivity extends Activity
具体源码大致
Activity
@Override
public void setTheme(int resid) {
super.setTheme(resid);
mWindow.setTheme(resid);
}
AppCompatActivity
/**
* @return The {@link AppCompatDelegate} being used by this Activity.
*/
@NonNull
public AppCompatDelegate getDelegate() {
if (mDelegate == null) {
mDelegate = AppCompatDelegate.create(this, this);
}
return mDelegate;
}
........
@Override
public void setTheme(@StyleRes final int resId) {
super.setTheme(resId);
getDelegate().setTheme(resId);
}
通过代码查找
AppCompatDelegateImpl的createSubDecor方法中
TypedArray a = mContext.obtainStyledAttributes(R.styleable.AppCompatTheme);
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.");
}
看出来AppCompatTheme里没有找到Translucent所以报错了。