前语
在 Android 4.4 中引入了沉溺办法的功用,但这个版别非实在的沉溺办法,应该说是通明办法。Android 5.0 今后才能够在体系层面完结实在的沉溺式状态栏。
沉溺式状态栏是为了与当时运用的 App 页面风格共同,不会显的那么突兀,坚持友爱且一同的用户体会而规划,是现在干流 App 必备的适配内容。今天咱们就细细的研究一下沉溺式状态栏的适配。
上appear作用
先赞后看,更新永不断
完结的功用
- 真通明状态栏(单个机型无法适配全通明,如锤子)
- 动态改动 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 >approach;= 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);
}
白色 | 黑色 |
---|---|
设置 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 >github中文社区; 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);
}
}
}
修改 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));
终究作用
图片较大假定看不了flutter值得学吗,能够去 GitHub 上看哦
源码库房
- GitHub 源码,随手就是一个 Star
- 体会 Apk 下载
总结
本文咱们为了优化用户的 App 运用体会,一同查看了 Android 各个版别上沉溺式(通明)状态栏的完结细节,并适配了对错状态栏主题以及 DrawerLayout
和NavigflutteringationView
的异常情况。虽然是很小的一个优化的点,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
得到了极佳的体会
欢迎点赞➕保藏➕谈论,有任何问题随时鄙人面谈论,我会第一时间回复哦