Android开发:如何让应用不修改顶部状态栏并解决主题兼容错误?
解决方法:保持状态栏默认样式同时兼容Material组件
问题原因
不能直接移除AndroidManifest.xml里的主题引用,因为你用到的BottomNavigationView是Material组件库控件,它强制要求应用主题必须是Theme.AppCompat或其子类(包括Theme.MaterialComponents系列)。移除主题引用后,应用会使用系统默认主题,不符合组件的主题校验规则,因此抛出IllegalArgumentException。
正确解决方案
无需删除主题引用,只需在自定义的Theme.blablabla主题中配置状态栏属性,让它完全跟随系统默认状态:
保留
AndroidManifest.xml中的主题引用:android:theme="@style/Theme.blablabla"修改
themes.xml中的主题配置,添加以下属性让状态栏继承系统样式:<style name="Theme.blablabla" parent="Theme.MaterialComponents.DayNight.NoActionBar"> <!-- 继承系统状态栏颜色 --> <item name="android:statusBarColor">?android:statusBarColor</item> <!-- 继承系统状态栏图标亮度设置(浅色/深色图标) --> <item name="android:windowLightStatusBar" tools:targetApi="m">?android:windowLightStatusBar</item> <!-- 允许系统绘制状态栏背景 --> <item name="android:windowDrawsSystemBarBackgrounds">true</item> </style>
这样配置后,应用主题依然满足Material组件的要求,同时状态栏会完全保持系统默认样式,和无应用运行时的状态一致。
内容的提问来源于stack exchange,提问作者yuexia_wrp
相关产品推荐
相关产品推荐

