第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > android 控制 导航栏 状态栏

android 控制 导航栏 状态栏

时间:2021-12-24 02:46:25

相关推荐

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(PLEX_UNIT_DIP,this,Resources.getSystem().displayMetrics)/*** 将PX转化为DP*/val Float.px2dpget() = TypedValue.applyDimension(PLEX_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)}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。