《IllegalStateException异常You need to use a Theme.AppCompat theme (or descendant) with this activity.》

一、开发背景

        修改了主题之后出现的问题:

        1. 报异常You need to use a Theme.AppCompat theme (or descendant) with this activity;

        2. 弹出对话框无法使用,或者无法让其消失,也就是说AlertDialog无法使用;

二、分析

        异常字面上的意思是:你需要需要一个主题,与AppCompat主题一样。

        也就是说我们在AndroidManifest.xml里面配置主题的时候跟我们写的Activtiy不一样。

 

<activity android:name=".module.view.activity.KuwoMusicPlayActivity"
            android:theme="@android:style/Theme.NoTitleBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
</activity>

        看代码,我们设置的主题是NoTitleBar,也就是说不要主题。

        而在我们的MainActivity里面继承AppCompatActivity,或者AppCompatActivity等Activity,或者其他的一些自动继承的Activity。也就出现了AppCompatActivity与主题NoTitleBar主题不匹配的问题。不匹配的原因是AppCompatActivity不适用于没有title的主题设置。那么我们需要怎么改呢?

三、处理方法      

       1. 先把主题改成想要的主题,如上面的Notitle;

       2. 把MainActivity 所继承的类改成 Activity即可。

public class MainActivity extends AppCompatActivity

改成activity继承自Activity:

public class MainActivity extends Activity

        因为AppCompatActivity 是继承了 FragmentActivity,而FragmentActivity有继承了BaseFragmentActivityJB,依次还有好几层继承关系,最后才继承了Activity。也就是说这些 Activity 的这些子类型并不能确定每个都是可以适配NoTitleBar这个主题。这样一分析,是否可以明白问题处在哪儿了呢。

        经过上面的处理之后,自己编写AlertDialog又能够正常的使用了。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值