前语

在 Android 4.4 中引入了沉溺办法的功用,但这个版别非实在的沉溺办法,应该说是通明办法。Android 5.0 今后才能够在体系层面完结实在的沉溺式状态栏。
沉溺式状态栏是为了与当时运用的 App 页面风格共同,不会显的那么突兀,坚持友爱且一同的用户体会而规划,是现在干流 App 必备的适配内容。今天咱们就细细的研究一下沉溺式状态栏的适配。

appear作用

Android 沉溺式(通明)状态栏细研-超级细还附 Demo | 创作者训练营第二期

先赞后看,更新永不断

完结的功用

  • 真通明状态栏(单个机型无法适配全通明,如锤子)
  • 动态改动 ToolBar 或许自定义的 TitleBar 颜色git指令,修改布景色即可,不需要动态改动状态flutter菜鸟教程栏颜色
  • 状态栏主git指令题办法(黑/白色)切换
  • 修改适配 DrawerLayout 在 4.4 上github怎样下载文件白边的问题
  • 适配“刘海屏”上的沉溺式状态栏
  • 导航栏完结个人认为美丽并通配的配色,可APP自定义修改

看完结代码

状态栏设置为通明

/**
* 设置通明Stagithub是干什么的tusBar
*
* @p源码集市aramgithub中文官网网页 activity Activity
*/
private static void setTranslucentStatusBar(Activity activity)gitlab {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
return;
}
Window window = activity.ggithub中文官网网页etWindow();
//通明状态栏
window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
if (Build.VERSION.SDK_INT &gtapproach;= Build.VERSION_CODES.LOLLIPOP) {
//5.0及以上版别源码网站,创建 Navigation Bar
createNavBar(activity);
} else {
//4.4 版别设置为通明状态栏
wiapprovendow.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
}github怎样下载文件

切换状态栏主题

这儿首要是为了更好的适配页面布景,因为有的页面适宜白色的状态栏图标,有的适宜黑色的状态栏图标

/**
* Androi源码编辑器d 6.0运用原始的主题适配
*github打不开
* @param activity Activity
* @param darkMode 是否是黑色办法
*/
public static void setBarDarkMode(Activity activity, boolean darkMode) {
Window window = activiflutter框架ty.getWindow();
if (window == null) {
return;
}
//设置StatusBar办法
if (darkMode) {//黑flutter值得学吗色办法
if (Build.VERSION.SDK_INT &源码编辑器手机版下载gt;= Build.VERSION_CODES.M) {
if (Build.VERSION.SDK_INT >= Build.VERSION_gitlabCODES.O) {//设置statusBar和navigatioflutter框架nBar为黑色
wgithub中文官网网页indow.getDecorVgit指令iew().setSystemUiVisibility(VFlutteriew.SYflutter菜鸟教程STEM_UI_FLAG_LIGgiti轮胎是什么品牌HT_NAVIGATION_BAR | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
} else {//设置statusBar为黑色
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
}
}
}源码编辑器 else {//白色办法
int statusBarFlag = View.SYSTEM_UI_FLAG_VISIBLE;
if (Bappleuild.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
statusBargit指令Flag = window.getDecorView().getSystemUiVisibilflutter是什么意思ity()
& ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_Bgithub中文官网网页Aflutter中文官网R;
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {//设置statusBar为白色,na源码编辑器vigationBar为灰色
//                int navgithub打不开BarFlag = window.源码网站getDecorView(源码编辑器编程猫下载).getSystemUiappointmentVisibility()
//                        & ~View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR;//假想象让navigationBar为白色,那么就运用这个代码。
int navBarFlagflutter中文官网 = View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR;
window.getDecorapproveView().setSystemUiVisibilitflutter值得学吗y(navBarFlagappear | statusgithub中文官网网页BarFlag);
} else {
window.getDecorView().setSystemUiVisibility(statusBarFlag);
}
}
setHuaWeiStatusBar(darkMode, window);
}
白色 黑色
Android 沉溺式(通明)状态栏细研-超级细还附 Demo | 创作者训练营第二期 Android 沉溺式(通明)状态栏细研-超级细还附 Demo | 创作者训练营第二期

设置 Navigation Bar 配色

现在是全面屏手机了,可是也源码编程能够设置敞开虚拟导航栏的。这儿首要是更改 Navigation Bar 在不同 Android 版其他配色,这儿能够依据规划师的配色或许分装成接口运用。

/**
* 创建flutteredNavigation Bar
*
* @param activity 上下文
*/
@TargetApi(Build.VERSION_Cgithub下载ODES.LOLLIPOP)
private static void createNavAPPBagithub中文官网网页r(Activity activity) {
int navBarHeight = getNavigationflutter是什么意思BarHeight(activity);
int navBarWidth = getNavigationBarWidth(activity);
if (flutter框架优缺点navBarHeight &gtgithub中文社区; 0 && navBarWiflutter是什么意思dth > 0) {
//创建NavigationBar
Vappeariew navBar =application new View(acti源码本钱vity);
FrameLayout.LayoutParamfluttershys pl;
if (activity.getResources(github中文官网网页).getConfiguration().orientation == Configuratio源码n.ORIENTATION_PORTRAIT) {
pl = new FrameLayout.LayoutParams(ViewGroup.Layogithub中文官网网页utParams.MATCH_PARENgithub中文官网网页T, navBarHeight);
pl.gravity = Gravity.BOTTOM;
} else {
pl = new FrameLayout.LayoutParams(naFluttervBarWidth, ViewGroupflutter框架.LayoutParams.MATCH_PARENT);
pl.Fluttergravity = Gravity.END;
}
navBar.setLayoutPargithub中文官网网页ams(pl);
if (Build.VERSION.SDK_INT >= Bappearuild.VER源码本钱SION_CODES.O) {
navBgithub永久回家地址ar.setBackgroundColor(Color.parseColor("#fffafafa"));
} else {
navBar.setBackgrouflutter框架ndColor(Color.parseColor("#40000000"));
}github开放私库
//添加到布源码网局傍边
ViewGroup decorViegithub开放私库w = (ViewGroup) activity.applicationgetWindow().github永久回家地址getDecorVie源码共享网w();
decorView.addView(navBar);
//设置主布局PaddingBottom源码编辑器手机版下载
ViewGroup contentView = decorView.findViewById(android.github是干什么的R.id.content);flutter框架
if (activitgithub中文社区y.getResources().getConfiguration().orientation == ConfiAPPguraGittion.ORIENTATION_PORTRAIT) {
contentView.setPaddingRelative(0, 0, 0,flutter框架 navBarHeight);
} elseAPP {
contentView.setPaddingRelative(0, 0, navBarWidth, 0);
}
}
}

Android 沉溺式(通明)状态栏细研-超级细还附 Demo | 创作者训练营第二期

修改 DrawerLayoutgithub永久回家地址 顶部白边的问题

在实践项目中咱们可能会用到 DrawerLayout ,可是设置了通明状态栏后,在 Android 4.4 上会呈现顶github打不开部白边的问题,通过下面的办法可修改

/**
* 设置 DrawerLayout 在4.4版别下透approve明,不然会呈现白边
*
* @pflutter框架优缺点aram drawerLayout DrawerLayout
*/
publigithub是干什么的c staticgithub中文官网网页 void setTranslucentDrawerLayout(Drawer源码网站Laflutter是什么意思yout drawerLayout)gitlab {
if (drawerLayout != null && Buiappearanceld.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && Build.VERSION.SDK_INTgithub永久回家地址 < Build.VERSION_CODEgithub中文官网网页S.LOLLIPOP) {
drawerLayout.setFitsSystemWindows(true);
drawerLayout.setClipToPadding(false);
}
}

到这儿咱们现已看到了完结的中心办法,我现已封装了一个 AndroidBarUtils ,便利项目中运用能够,下面咱们介绍一下怎样运用,并且你能够直接查看我编写好的 GitHubgiti wiki

运用办法

怎样引证?

暂时不供应长途库github开放私库引证的办法,只要一个类,点击下载 然后放到项目中即可,也便利自己扩展。

调用办法

  • 设置通明状态栏
AndroidBarUtils.setTranslucent(this);
  • 修改堆flutter面试题叠问题以及适配“刘海屏”(ToolBar、自定义的TitleBar、Naviga源码年代tionView 都可用)
/flutter框架/ToolBar、自定义的TitleBar 堆叠问题以及适配刘海屏
AndroidBarUtils.setBarPaddingTop(this, view);
  • 设置状态栏主题(6.0及以上才有作用)
//fal源码年代se:白色 true:黑色
AndroidBarUtils.setBarDarkMod源码网站e(this, false);

不常见问题

  • Android 4.4 上运用了 DrawerLayout 会呈现白源码编辑器编程猫下载条,怎样处理?
AndroidBarUtils.setTranslucentDrawerLayout(drawerLayout);
  • 怎样让 NavigationViewgithub打不开 适配 刘海屏
AndroidBarUtils.sGitetBarPaddingTop(this,navigationView.getHeaderView(0));

终究作用

Android 沉溺式(通明)状态栏细研-超级细还附 Demo | 创作者训练营第二期

图片较大假定看不了flutter值得学吗,能够去 GitHub 上看哦

源码库房

  • GitHub 源码,随手就是一个 Star
  • 体会 Apk 下载

总结

本文咱们为了优化用户的 App 运用体会,一同查看了 Android 各个版别上沉溺式(通明)状态栏的完结细节,并适配了对错状态栏主题以及 DrawerLayoutNavigflutteringationView 的异常情况。虽然是很小的一个优化的点,flutter面试题可是从页面美丽和领github永久回家地址会角度做了很大的进步。

参阅:

  • AdvancedImmersiveMode
  • Display Cutouts-Android Developer
  • System UI – Android Developer

关于我

  • 15 年~18 年,运用 Android 原生做智GitHub能硬件相关的 App 研发
  • 18fluttered 年 5 月,一次偶然的机会触摸到了 Flutter ,然github中文官网网页后初步自学,能够看 weather_flutter 是我操练 Flutter 的入门实战github直播平台永久回家项目fluttered(我现在仍然觉得他十分适宜 FlutteFlutterr 入门操练运用)
  • 18 年 8 月,fluttered顶着巨大的压力(Flutter 当时还没有 Release 1.源码编程0)初步运用 Flutter 开发企业级项目,并且开发维护了十几个 Flutter 插件包(因为当时插件资源十分的匮乏)
  • 截止现在主导并参与上源码编程线了github永久回家地址 4 款企业级Flutter App,当时正在担任的一款 App 累计用户flutter框架优缺点 120W+flutter中文官网运用 Flutter 得到了极佳的体会

欢迎点赞➕保藏➕谈论,有任何问题随时鄙人面谈论,我会第一时间回复哦