继承AppCompatActivity的无UI Activity主题适配问题求助
解决继承AppCompatActivity的无UI Activity主题冲突问题
哦,这个问题我之前也踩过坑!因为AppCompatActivity强制要求使用AppCompat家族的主题,原生的@android:style/Theme.NoDisplay并不属于这个系列,所以才会抛出主题不匹配的错误。这里有两种靠谱的解决办法:
方法一:使用AppCompat专属的无显示主题
AppCompat提供了对应的无界面主题Theme.AppCompat.NoDisplay,直接在Manifest里替换原来的主题配置就行:
<activity android:name=".NoUIActivity" android:theme="@style/Theme.AppCompat.NoDisplay"> </activity>
如果你的项目使用了Material Components库,也可以用对应的主题,比如Theme.MaterialComponents.NoActionBar.NoDisplay,核心就是要选属于AppCompat/Material系列的无显示主题。
方法二:通过Window Flags隐藏界面
如果不想修改主题,也可以在Activity的onCreate()方法里,通过设置窗口标记来隐藏界面,记得不要调用setContentView():
@Override protected void onCreate(Bundle savedInstanceState) { // 先设置窗口不可见且不接收触摸事件 getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE, WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_VISIBLE, WindowManager.LayoutParams.FLAG_NOT_VISIBLE); super.onCreate(savedInstanceState); // 在这里处理你的后台逻辑,比如数据同步、跳转页面等 // 任务完成后可以直接finish掉Activity finish(); }
个人更推荐第一种方法,因为这是官方为AppCompat场景提供的标准解决方案,代码更简洁规范。
内容的提问来源于stack exchange,提问作者user1506104
相关产品推荐
相关产品推荐

