一、目标 - 解决应用顶部出现“灰色状态栏”与页面顶栏不一致的问题,实现类似微信的“状态栏与页面顶部一体化”。 - 要求:背景色一致、状态栏图标/文字颜色(黑/白)可按页面动态切换,内容不被状态栏遮挡。 二、适配范围 - Android 6.0+(API 23)可切换状态栏图标深浅色。 - 低于 6.0 的机型只支持设置状态栏背景色,不支持图标颜色切换(系统限制)。 三、核心实现 1) 复用基类的状态栏控制能力 - 基类:`uikit/src/main/java/cn/wildfire/chat/kit/WfcBaseActivity.java` - 方法:`setTitleBackgroundResource(int resId, boolean dark)` - 作用:同步设置 Toolbar 背景、状态栏背景色,并切换状态栏图标深浅(通过 `setStatusBarTheme`)。 - 参数含义: - `resId`:颜色资源ID - `dark`:true 表示状态栏图标为浅色(适合深色背景);false 表示状态栏图标为深色(适合浅色背景)。 2) SettingActivity 动态设置为白色一体化 - 文件:`app/src/main/java/com/xunpaisoft/social/im/setting/SettingActivity.java` - 位置:`afterViews()` - 增加调用: `setTitleBackgroundResource(R.color.white, false);` 含义:状态栏与顶栏背景统一为白色,状态栏图标为深色(黑色)。 3) 布局根视图避免内容被状态栏遮挡 - 文件:`app/src/main/res/layout/setting_activity.xml` - 修改: - 根布局背景:`@color/white` - 启用沉浸适配:`android:fitsSystemWindows="true"` 示例: 四、使用指引(推广到其他页面) - 浅色顶栏(白底): `setTitleBackgroundResource(R.color.white, false);` - 深色顶栏(如深蓝/黑): `setTitleBackgroundResource(R.color.colorPrimary, true);` - 对应页面的根布局需: `android:fitsSystemWindows="true"`,或在根布局顶部增加与状态栏等高的 padding。 五、常见问题与排查 1) 仍有“灰条”或色差: - 检查页面根布局或父容器是否设置了与顶栏不一致的背景色(例如 `gray5`)。 - 检查是否是继承了带背景的通用容器(如 `ProgressFragment`),移除其硬编码背景或与页面顶栏统一。 2) 内容被状态栏遮挡/上移: - 确认根布局已加 `android:fitsSystemWindows="true"`。 - 如页面使用沉浸全屏且自定义标题栏,需手动加上 `statusBarHeight` 的顶部 padding。 3) 某些 ROM(MIUI、ColorOS)图标颜色未切换: - Android 6.0 以下系统不支持切换图标颜色,属系统限制。 - 个别 ROM 存在兼容差异,可考虑厂商私有 Flag(可按需再扩展)。 六、验证步骤 1) 启动应用: `adb shell am start -n com.xunpaisoft.social/.im.main.MainActivity` 2) 在应用内进入“设置”页,观察: - 顶部状态栏与页面顶栏背景均为纯白,无灰条; - 状态栏图标/时间为深色; - 列表内容不被遮挡,可正常滚动。 七、变更清单 - `app/src/main/res/layout/setting_activity.xml` - 根布局背景设为 `@color/white` - 增加 `android:fitsSystemWindows="true"` - `app/src/main/java/com/xunpaisoft/social/im/setting/SettingActivity.java` - `afterViews()` 中调用 `setTitleBackgroundResource(R.color.white, false)` 八、后续扩展 - 如需按页面动态切换,只需在各 Activity/Fragment 对应时机调用 `setTitleBackgroundResource(colorRes, isDarkIcons)`。 - 对 Fragment 场景,建议由承载 Activity 统一设置状态栏,并确保 Fragment 根布局同样处理 `fitsSystemWindows` 或顶部 padding。