一、开发背景
修改了主题之后出现的问题:
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又能够正常的使用了。