1. 旧API隐藏导航栏:

window.attributes.apply {systemUiVisibility = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_IMMERSIVEwindow.attributes = this
}

但在SDK30开始,我们发现 systemUiVisibility,SYSTEM_UI_FLAG_HIDE_NAVIGATION,SYSTEM_UI_FLAG_IMMERSIVE 已经被废弃了,我们应当用新的API进行调用,新的API兼容旧版本;

1.1 新API隐藏导航栏:

/*** @param immersive 是否启用沉浸式导航栏 true启用,导航栏将透明,底部上滑出现,过段时间消失* false不启用,导航栏不透明,底部上滑出现,出现后不再消失*/
private fun hideNavigationBar(window: Window, immersive: Boolean) {val windowInsetsControllerCompat = WindowInsetsControllerCompat(window, window.decorView)windowInsetsControllerCompat.hide(WindowInsetsCompat.Type.navigationBars())windowInsetsControllerCompat.systemBarsBehavior =if (immersive) WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPEelse WindowInsetsControllerCompat.BEHAVIOR_SHOW_BARS_BY_SWIPE
}

1.2 隐藏导航栏,可用扩展函数的方式:


/*** 隐藏底部导航栏,导航栏不透明,底部上滑出现,出现后不再消失*/
fun AppCompatActivity.hideNavigationBarOnce() {hideNavigationBar(window, false)
}/*** 隐藏底部导航栏,导航栏不透明,底部上滑出现,出现后不再消失*/
fun DialogFragment.hideNavigationBarOnce() {dialog?.window?.let { hideNavigationBar(it, false) }
}/*** 隐藏底部导航栏,导航栏不透明,底部上滑出现,出现后不再消失*/
fun Dialog.hideNavigationBarOnce() {window?.let { hideNavigationBar(it, false) }
}/*** 隐藏底部导航栏,导航栏将透明,底部上滑出现,过段时间消失*/
fun AppCompatActivity.hideNavigationBarAlways() {hideNavigationBar(window, true)
}/*** 隐藏底部导航栏,导航栏将透明,底部上滑出现,过段时间消失*/
fun DialogFragment.hideNavigationBarAlways() {dialog?.window?.let { hideNavigationBar(it, true) }
}/*** 隐藏底部导航栏,导航栏将透明,底部上滑出现,过段时间消失*/
fun Dialog.hideNavigationBarAlways() {window?.let { hideNavigationBar(it, true) }
}

2. 旧API隐藏状态栏:

window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN)

在SDK30开始,WindowManager.LayoutParams.FLAG_FULLSCREEN以及WindowManager.LayoutParams.FLAG_FULLSCREEN也被废弃了,同样我们需要使用新版API

2.1 新API隐藏隐藏状态栏:

/*** 隐藏状态栏*/
fun AppCompatActivity.hideStatusBar() {val windowInsetsControllerCompat = WindowInsetsControllerCompat(window, window.decorView)windowInsetsControllerCompat.hide(WindowInsetsCompat.Type.statusBars())
}

2.2 设置状态栏透明

/*** 设置状态栏透明*/
fun AppCompatActivity.setStatusBarTransparent() {window.statusBarColor = Color.TRANSPARENT
}

2.3 获取状态栏高度

/*** 状态栏高度*/
val AppCompatActivity.statusBarHeightget() = run {val resourceId = resources.getIdentifier("status_bar_height", "dimen", "android")if (resourceId > 0) resources.getDimensionPixelSize(resourceId)else 20F.dp2px.toInt()}/*** 将DP转化成PX*/
val Float.dp2pxget() = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,this,Resources.getSystem().displayMetrics)/*** 将PX转化为DP*/
val Float.px2dpget() = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX,this,Resources.getSystem().displayMetrics)

3. 新API隐藏导航栏、状态栏、标题栏:

/*** 沉浸式隐藏状态栏,标题栏,导航栏* @param immersive 是否启用沉浸式导航栏 true启用,导航栏将透明,底部上滑出现,过段时间消失* false不启用,导航栏不透明,底部上滑出现,出现后不再消失*/
fun AppCompatActivity.hideSystemBar(immersive: Boolean = true) {val windowInsetsControllerCompat = WindowInsetsControllerCompat(window, window.decorView)windowInsetsControllerCompat.hide(WindowInsetsCompat.Type.systemBars())windowInsetsControllerCompat.systemBarsBehavior =if (immersive) WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPEelse WindowInsetsControllerCompat.BEHAVIOR_SHOW_BARS_BY_SWIPE
}

4. 设置全屏模式

/*** 设置是否全屏显示界面* 全屏显示时,界面将不考虑状态栏、导航栏的高度,显示到状态栏、导航栏背后* @param isFullScreen true为全屏显示 false为非全屏*/
fun AppCompatActivity.setFullScreen(isFullScreen: Boolean = true) {WindowCompat.setDecorFitsSystemWindows(window, !isFullScreen)
}

android 控制 导航栏、状态栏相关推荐

  1. Android隐藏导航栏按键,Android如何控制导航栏单个按键的显隐状态

    我们都知道Android系统的导航栏通常有三个按键,分别是BACK, HOME, APP_SWITCH. 网上很多有关导航栏和状态栏显隐的文章,但几乎都是控制导航栏或状态栏所有按键同时显示或消失,如果 ...

  2. Android 9.0 10.0 沉浸式状态栏导致导航栏状态栏灰色蒙层的解决方案

    1.概述 在10.0的系统产品开发中,在app开发中,沉浸式状态栏也是常有的样式,但是设置沉浸式状态栏后,会导致状态栏和导航栏会有灰色蒙层的问题存在 解决方案: DecorView是整个Window界 ...

  3. 全志 强制隐藏导航栏状态栏 Patch

    modify 隐藏导航栏状态栏diff --git a/android/frameworks/base/core/res/res/values/dimens.xml b/android/framewo ...

  4. android 固定底部导航,如何设置android底部导航栏位置固定在android

    请帮我设置底部导航栏位置固定在底部, ,因为我在输入editText字段时遇到问题,底部导航栏向上移动并覆盖其他领域如何设置android底部导航栏位置固定在android 代码: xmlns:and ...

  5. android fragment 底部菜单栏,一句话搞定Android底部导航栏,一键绑定Fragment、ViewPager...

    现在大多数App都会用到底部导航栏,比如常见的聊天工具QQ.微信.购物App等等,有了底部导航栏,用户可以随时切换界面,查看不同的内容.它的实现方式也很多,以前大多使用TabHost来实现,但是现在我 ...

  6. Android中导航栏之溢出菜单OverflowMenu

    Toolbar系列文章导航 Android中导航栏之Toolbar的使用 Android中导航栏之溢出菜单OverflowMenu Android中导航栏之搜索框SearchView Android中 ...

  7. 转载:Android底部导航栏,三种风格和实现

    原文出处 标题:Android底部导航栏,三种风格和实现 作者:阿飞__ 原文链接:Android底部导航栏,三种风格和实现_阿飞__的博客-CSDN博客_android导航栏 一.效果图展示 如果动 ...

  8. Android底部导航栏的三种风格实现

    一.效果图展示 如果动图没有动的话,也可以看下面这个静态图 以下挨个分析每个的实现,这里只做简单的效果展示,大家可以基于目前代码做二次开发. 二.BottomNavigationView 这是 Goo ...

  9. Android 9 导航栏添加截图按钮

    Android 9 导航栏添加截图按钮 功能:Android 系统底部导航栏(HOME\BACK)位置添加截图按钮,系统设置界面添加截图开关 主要修改工程有SystemUI 和 Settings 注意 ...

最新文章

  1. linux 修改home 目录
  2. qq邮箱mx服务器,电子邮箱如何设置域名MX记录
  3. 微软发话:Win10杀毒软件要优先选它
  4. 线段树(假)练习题一(学校OJ的题)
  5. Scala可以将Java中的接口当作特质来使用
  6. ios 顶部tab滑动实现_iOS开发之多表视图滑动切换示例(仿头条客户端)
  7. 网络编程之如何通过URL获取网页代码
  8. Ruby中的Profiling工具
  9. UI加载动效模板|优秀作品给UI设计师做个示范
  10. DDD-Mapper
  11. JAVA 导出 Excel, JS 导出 Excel
  12. 详细说明手工创建oracle数据库实例
  13. mathematica完爆matlab,Mathematica和Matlab相比的计算效率问题
  14. java actionsupport_ActionSupport与action区别
  15. ubuntu安装包常用下载地址
  16. Javacv 音视频小工具 - 下载抖音视频
  17. python3GUI--打造一款音乐播放器By:PyQt5(附下载地址)
  18. 已知函数fx=sin(wx+φ)_已知函数fx=Asin(wx+φ) (x∈R,A0,w0,0
  19. 安装oracle提示删除asm服务,卸载 ASM
  20. 远程执行模块和黏包 socketserve hamc模块验证合法性

热门文章

  1. vagrants流浪者全人物防具
  2. 【RGB3DS道路检测车智慧运维解决方案】助力城市道路运维数字化转型
  3. 双内核浏览器内核切换控制技术
  4. 桌面图标上有个白框解决方案
  5. linux指令 apt-grt指令使用
  6. html路由路径,苹果cms默认路由规则路径
  7. 凌云公益2023.1.16第107期助学活
  8. 车身计算机的控制原理图,汽车白车身激光焊接生产线控制系统设计
  9. mysql取余 和 取模_java 取模运算% 实则取余 简述 例子 应用在数据库分库分表
  10. csdn文章中数学符号的上角标和下角标