排查 Android 深色主题下的标题栏冲突

246 字
1 分钟
排查 Android 深色主题下的标题栏冲突

现象#

切换到深色主题后,页面可能出现重复标题栏、ActionBar 与自定义 Toolbar 冲突,或 requestFeature() 相关异常。

快速结论#

windowActionBar 和 windowNoTitle 控制窗口标题栏,不是“开启深色模式”的配置。如果应用自行提供 Toolbar,应直接继承 NoActionBar 主题;如果使用系统 ActionBar,则不要关闭它。

推荐修复#

Material Components 项目可以在基础主题中选择无 ActionBar 变体:

<style name="Theme.Example" parent="Theme.MaterialComponents.DayNight.NoActionBar">
    <!-- 应用自己的颜色和组件样式 -->
</style>

维护旧主题时,也可以显式设置:

<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>

这两个属性应放在基础主题中,确保 values/themes.xml 与 values-night/themes.xml 继承关系一致,避免明暗主题行为不同。

验证#

分别在浅色、深色和“跟随系统”模式启动应用,检查页面只有一个标题栏、状态栏文字对比度足够,并确认旋转屏幕后主题保持一致。

参考#

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

排查 Android 深色主题下的标题栏冲突
https://blog.mintalix.com/posts/study-kotlin-about-3/
作者
Mint
发布于
2021-06-26
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
Mint
软件开发、工程实践与技术思考。
分类
标签