android 控制 导航栏、状态栏
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 控制 导航栏、状态栏相关推荐
- Android隐藏导航栏按键,Android如何控制导航栏单个按键的显隐状态
我们都知道Android系统的导航栏通常有三个按键,分别是BACK, HOME, APP_SWITCH. 网上很多有关导航栏和状态栏显隐的文章,但几乎都是控制导航栏或状态栏所有按键同时显示或消失,如果 ...
- Android 9.0 10.0 沉浸式状态栏导致导航栏状态栏灰色蒙层的解决方案
1.概述 在10.0的系统产品开发中,在app开发中,沉浸式状态栏也是常有的样式,但是设置沉浸式状态栏后,会导致状态栏和导航栏会有灰色蒙层的问题存在 解决方案: DecorView是整个Window界 ...
- 全志 强制隐藏导航栏状态栏 Patch
modify 隐藏导航栏状态栏diff --git a/android/frameworks/base/core/res/res/values/dimens.xml b/android/framewo ...
- android 固定底部导航,如何设置android底部导航栏位置固定在android
请帮我设置底部导航栏位置固定在底部, ,因为我在输入editText字段时遇到问题,底部导航栏向上移动并覆盖其他领域如何设置android底部导航栏位置固定在android 代码: xmlns:and ...
- android fragment 底部菜单栏,一句话搞定Android底部导航栏,一键绑定Fragment、ViewPager...
现在大多数App都会用到底部导航栏,比如常见的聊天工具QQ.微信.购物App等等,有了底部导航栏,用户可以随时切换界面,查看不同的内容.它的实现方式也很多,以前大多使用TabHost来实现,但是现在我 ...
- Android中导航栏之溢出菜单OverflowMenu
Toolbar系列文章导航 Android中导航栏之Toolbar的使用 Android中导航栏之溢出菜单OverflowMenu Android中导航栏之搜索框SearchView Android中 ...
- 转载:Android底部导航栏,三种风格和实现
原文出处 标题:Android底部导航栏,三种风格和实现 作者:阿飞__ 原文链接:Android底部导航栏,三种风格和实现_阿飞__的博客-CSDN博客_android导航栏 一.效果图展示 如果动 ...
- Android底部导航栏的三种风格实现
一.效果图展示 如果动图没有动的话,也可以看下面这个静态图 以下挨个分析每个的实现,这里只做简单的效果展示,大家可以基于目前代码做二次开发. 二.BottomNavigationView 这是 Goo ...
- Android 9 导航栏添加截图按钮
Android 9 导航栏添加截图按钮 功能:Android 系统底部导航栏(HOME\BACK)位置添加截图按钮,系统设置界面添加截图开关 主要修改工程有SystemUI 和 Settings 注意 ...
最新文章
- linux 修改home 目录
- qq邮箱mx服务器,电子邮箱如何设置域名MX记录
- 微软发话:Win10杀毒软件要优先选它
- 线段树(假)练习题一(学校OJ的题)
- Scala可以将Java中的接口当作特质来使用
- ios 顶部tab滑动实现_iOS开发之多表视图滑动切换示例(仿头条客户端)
- 网络编程之如何通过URL获取网页代码
- Ruby中的Profiling工具
- UI加载动效模板|优秀作品给UI设计师做个示范
- DDD-Mapper
- JAVA 导出 Excel, JS 导出 Excel
- 详细说明手工创建oracle数据库实例
- mathematica完爆matlab,Mathematica和Matlab相比的计算效率问题
- java actionsupport_ActionSupport与action区别
- ubuntu安装包常用下载地址
- Javacv 音视频小工具 - 下载抖音视频
- python3GUI--打造一款音乐播放器By:PyQt5(附下载地址)
- 已知函数fx=sin(wx+φ)_已知函数fx=Asin(wx+φ) (x∈R,A0,w0,0
- 安装oracle提示删除asm服务,卸载 ASM
- 远程执行模块和黏包 socketserve hamc模块验证合法性