前言
在 Android 4.4 中引入了沉浸模式的功能,但这个版本非真正的沉浸模式,应该说是透明模式。Android 5.0 以后才可以在系统层面实现真正的沉浸式状态栏。
沉浸式状态栏是为了与当前使用的 App 页面风格统一,不会显的那么突兀,保持友好且一致的用户体验而设计,是现在主流 App 必备的适配内容。今天我们就细细的研究一下沉浸式状态栏的适配。
先看效果
实现的功能
- 真透明状态栏(个别机型无法适配全透明,如锤子)
- 动态改变 ToolBar 或者自定义的 TitleBar 颜色,修改背景色即可,不需要动态改变状态栏颜色
- 状态栏主题模式(黑/白色)切换
- 修复适配 DrawerLayout 在 4.4 上白边的问题
- 适配“刘海屏”上的沉浸式状态栏
- 导航栏实现个人认为美观并通配的配色,可自定义修改
看实现代码
状态栏设置为透明
/**
* 设置透明StatusBar
*
* @param activity Activity
*/
private static void setTranslucentStatusBar(Activity activity) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
return;
}
Window window = activity.getWindow();
//透明状态栏
window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
//5.0及以上版本,创建 Navigation Bar
createNavBar(activity);
} else {
//4.4 版本设置为透明状态栏
window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
}
切换状态栏主题
这里主要是为了更好的适配页面背景,因为有的页面适合白色的状态栏图标,有的适合黑色的状态栏图标
/**
* Android 6.0使用原始的主题适配
*
* @param activity Activity
* @param darkMode 是否是黑色模式
*/
public static void setBarDarkMode(Activity activity, boolean darkMode) {
Window window = activity.getWindow();
if (window == null) {
return;
}
//设置StatusBar模式
if (darkMode) {
//黑色模式
if (Build