欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

@android:style/Theme.Translucent引发的报错

程序员文章站 2022-07-02 11:47:57
  <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所以报错了。

本文地址:https://blog.csdn.net/litaowansui/article/details/110630633

相关标签: 遇到的问题