-
2022-01-15 14:38:01
SystemUI setSystemUiVisibility参数属性
View.SYSTEM_UI_FLAG_FULLSCREEN
全屏模式,占据整个屏幕,隐藏状态栏等界面,但是导航栏不会隐藏。如果用户进行操作,隐藏的系统界面会立马出现并清除该flag。
View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
隐藏导航栏,布局会往下移。如果用户进行操作,导航栏会立马出现并清除该flag。
View.SYSTEM_UI_FLAG_IMMERSIVE
沉浸模式。修饰SYSTEM_UI_FLAG_HIDE_NAVIGATION,使用户操作不再显示导航栏(但是仍能通过从底部往上滑调出导航栏并清除flag)。单独使用无效。
View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
粘性沉浸模式。修饰SYSTEM_UI_FLAG_FULLSCREEN与SYSTEM_UI_FLAG_HIDE_NAVIGATION。用户操作不再清除flag,从边缘滑入可以调出状态栏和导航栏,并且过几秒之后自动隐藏。单独使用无效。
View. SYSTEM_UI_FLAG_LOW_PROFILE
低配模式,设置后,系统状态栏的信号等图标消失,重要图标颜色变浅(如电量图标)。
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
加入SYSTEM_UI_FLAG_LAYOUT_STABLE后,SystemUI发生变化也不会影响用户布局,单独使用该FLAG界面不会有任何变化。
View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
状态栏的图标以深色绘制。设置了这个属性,状态栏会以与状态栏背景颜色兼容的模式绘制。
View.SYSTEM_UI_FLAG_VISIBLE
用户表示状态栏可见,默认flag
更多相关内容 -
Android setSystemUiVisibility方法详解
2021-01-05 22:52:00通过setSystemUiVisibility(int)方法,改变状态栏或者其他系统UI的可见性。 getWindow().getDecorView().setSystemUiVisibility(int visibility); 1 默认显示状态栏和导航栏,SYSTEM_UI_FLAG_VISIBLE 1.SYSTEM_...前言
通过
setSystemUiVisibility(int)
方法,改变状态栏或者其他系统UI的可见性。getWindow().getDecorView().setSystemUiVisibility(int visibility);
- 1
默认显示状态栏和导航栏,
SYSTEM_UI_FLAG_VISIBLE
1.
SYSTEM_UI_FLAG_LOW_PROFILE
低调模式,隐藏不重要的状态栏图标,导航栏中相应的图标都变成了一个小点。点击状态栏或者导航栏还原成正常的状态。
2.
SYSTEM_UI_FLAG_HIDE_NAVIGATION
隐藏导航栏,点击屏幕任意区域,导航栏将重新出现。
3.
SYSTEM_UI_FLAG_FULLSCREEN
隐藏状态栏,从状态栏位置下拉,状态栏将重新出现。
4.
SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
将布局内容拓展到导航栏和状态栏的后面。
5.
SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
将布局内容拓展到状态栏的后面。
6.
SYSTEM_UI_FLAG_LAYOUT_STABLE
稳定布局,需要配合
SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
和SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
使用,同时设置布局的android:fitsSystemWindows
属性。未使用
SYSTEM_UI_FLAG_LAYOUT_STABLE
的效果。
使用SYSTEM_UI_FLAG_LAYOUT_STABLE
的效果。7.
SYSTEM_UI_FLAG_IMMERSIVE
配合
SYSTEM_UI_FLAG_HIDE_NAVIGATION
和SYSTEM_UI_FLAG_FULLSCREEN
使用,使状态栏和导航栏真正的进入沉浸模式。点击屏幕任意区域,不会退出全屏模式,只有用户上下拉状态栏或者导航栏时才会退出。8.
SYSTEM_UI_FLAG_IMMERSIVE_STICKY
效果同
SYSTEM_UI_FLAG_IMMERSIVE
,当用户上下拉状态栏或者导航栏时,这些系统栏会以半透明的状态显示,并且在一段时间后消失。9.
SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
设置状态栏的颜色,6.0版本以后有效。
-
Android setSystemUiVisibility详解
2019-02-24 23:49:55本文主要讲解setSystemUiVisibility方法中的参数各个属性标志对应的用法和实际效果。主要讲解的标志有: - SYSTEM_UI_FLAG_LOW_PROFILE - SYSTEM_UI_FLAG_HIDE_NAVIGATION - SYSTEM_UI_FLAG_FULLSCREEN - ...简介
本文主要讲解setSystemUiVisibility方法中的参数各个属性标志对应的用法和实际效果。主要讲解的标志有:
- SYSTEM_UI_FLAG_LOW_PROFILE - SYSTEM_UI_FLAG_HIDE_NAVIGATION - SYSTEM_UI_FLAG_FULLSCREEN - SYSTEM_UI_FLAG_LAYOUT_STABLE - SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION - SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN - SYSTEM_UI_FLAG_IMMERSIVE - SYSTEM_UI_FLAG_IMMERSIVE_STICKY
下图是没有设置任何标志时的效果。
这里写图片描述
解析
View.SYSTEM_UI_FLAG_LOW_PROFILE
设置状态栏和导航栏中的图标变小,变模糊或者弱化其效果。这个标志一般用于游戏,电子书,视频,或者不需要去分散用户注意力的应用软件。
代码调用getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE);
实际效果
这里写图片描述
从上图的效果中,我们可以看出状态栏和导航栏中相应的图标都变成了一个小点,这就达到了弱化的效果,具体变成什么效果要根据实际的机型系统版本而定。同时,点击状态栏和导航栏相应的位置,这些图标的效果会还原成正常的状态。
View.SYSTEM_UI_FLAG_HIDE_NAVIGATION隐藏导航栏,点击屏幕任意区域,导航栏将重新出现,并且不会自动消失。
代码调用getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
实现效果
这里写图片描述
View.SYSTEM_UI_FLAG_FULLSCREEN
隐藏状态栏,点击屏幕区域不会出现,需要从状态栏位置下拉才会出现。
代码调用getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN);
实现效果
这里写图片描述
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
将布局内容拓展到导航栏的后面。
代码调用getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
实现效果
这里写图片描述
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
将布局内容拓展到状态的后面。
代码调用getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
实现效果
这里写图片描述
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
稳定布局,主要是在全屏和非全屏切换时,布局不要有大的变化。一般和View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN、View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION搭配使用。同时,android:fitsSystemWindows要设置为true。
代码调用private void toggle() { if (mVisible) { getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LOW_PROFILE | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); } else { getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION ); } mVisible = !mVisible; }
activity_main.xml
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" android:background="@drawable/bg" > </FrameLayout>
实现效果
没有加View.SYSTEM_UI_FLAG_LAYOUT_STABLE标志的效果
这里写图片描述
加了View.SYSTEM_UI_FLAG_LAYOUT_STABLE标志的效果
这里写图片描述
通过这个上面的效果对比,可以很清楚的区分View.SYSTEM_UI_FLAG_LAYOUT_STABLE这个属性的特性了。
View.SYSTEM_UI_FLAG_IMMERSIVE使状态栏和导航栏真正的进入沉浸模式,即全屏模式,如果没有设置这个标志,设置全屏时,我们点击屏幕的任意位置,就会恢复为正常模式。所以,View.SYSTEM_UI_FLAG_IMMERSIVE都是配合View.SYSTEM_UI_FLAG_FULLSCREEN和View.SYSTEM_UI_FLAG_HIDE_NAVIGATION一起使用的。
代码调用getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE);
实现效果
这里写图片描述
对比View.SYSTEM_UI_FLAG_HIDE_NAVIGATION的效果,可以看出来,在没有设置View.SYSTEM_UI_FLAG_IMMERSIVE时,随便点击屏幕就可以解除隐藏导航栏的状态。所以,设置View.SYSTEM_UI_FLAG_IMMERSIVE就是真正进入沉浸模式。
View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY它的效果跟View.SYSTEM_UI_FLAG_IMMERSIVE一样。但是,它在全屏模式下,用户上下拉状态栏或者导航栏时,这些系统栏只是以半透明的状态显示出来,并且在一定时间后会自动消息。
代码调用getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
实现效果
这里写图片描述
额外补充我们在设置全屏和非全屏的时候,可以通过下面的方法实现,代码如下:
if (mVisible){ //全屏 getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); } else { //非全屏 getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION ); }
总结
Flag 意义
SYSTEM_UI_FLAG_LOW_PROFILE 弱化状态栏和导航栏的图标
SYSTEM_UI_FLAG_HIDE_NAVIGATION 隐藏导航栏,用户点击屏幕会显示导航栏
SYSTEM_UI_FLAG_FULLSCREEN 隐藏状态栏
SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION 拓展布局到导航栏后面
SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 拓展布局到状态栏后面
SYSTEM_UI_FLAG_LAYOUT_STABLE 稳定的布局,不会随系统栏的隐藏、显示而变化
SYSTEM_UI_FLAG_IMMERSIVE 沉浸模式,用户可以交互的界面
SYSTEM_UI_FLAG_IMMERSIVE_STICKY 沉浸模式,用户可以交互的界面。同时,用户上下拉系统栏时,会自动隐藏系统栏
---------------------
作者:qqxiaoqiang1573
来源:CSDN
原文:https://blog.csdn.net/QQxiaoqiang1573/article/details/79867127 -
Android setSystemUiVisibility 动态更改状态栏
2021-06-05 02:30:35再后来找到了setSystemUiVisibility,完美解决问题。实现没有任何技术含量,但是属性比较多,所以也就记录一下,到时候需要可以回档看一下。 我的dialog布局是match_parent,设置 当前布局 view....近期给dialog不能全屏显示困扰,我设置Activity是有颜色状态栏的,所以显示dialog时状态栏也还在,考虑过 更改getwindow.attributes 的属性,但是并不起作用,也就想到的另外一个东西:动态更改状态栏。
一开始有想到,是不是重置直接设置getwindow.setFlags(value)就行了,但是结果是不可以的这个操作必须在setContenView之前。再后来找到了setSystemUiVisibility,完美解决问题。实现没有任何技术含量,但是属性比较多,所以也就记录一下,到时候需要可以回档看一下。
我的dialog布局是match_parent,设置 当前布局
view.setSystemUiVisibility( View.SYSTEM_UI_FLAG_FULLSCREEN)
就可以实现dialog全屏的需求啦。
setSystemUiVisibility的相关属性
View.SYSTEM_UI_FLAG_HIDE_NAVIGATION, //隐藏导航栏
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION,
View.SYSTEM_UI_LAYOUT_FLAGS,
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN, //全屏,状态栏会盖在布局上
View.SYSTEM_UI_FLAG_FULLSCREEN, //全屏,状态栏和导航栏不显示
View.SYSTEM_UI_FLAG_VISIBLE, //显示状态栏和导航栏
View.SYSTEM_UI_FLAG_LAYOUT_STABLE,// 保持View Layout不变,隐藏状态栏或者导航栏后,View不会拉伸。
View.SYSTEM_UI_FLAG_LOW_PROFILE,//状态栏:低能显示状态,状态栏上一些图标显示会被隐藏。
View.SYSTEM_UI_FLAG_IMMERSIVE//只有当设置了SYSTEM_UI_FLAG_HIDE_NAVIGATION才起作用。如果没有设置,任意的View相互动作都退出SYSTEM_UI_FLAG_HIDE_NAVIGATION模式。如果设置就不会退出。
View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY//只有当设置了SYSTEM_UI_FLAG_FULLSCREEN | SYSTEM_UI_FLAG_HIDE_NAVIGATION 时起作用。如果没有设置,任意的View相互动作都退出SYSTEM_UI_FLAG_FULLSCREEN | SYSTEM_UI_FLAG_HIDE_NAVIGATION模式。
-
android 使用setSystemUiVisibility导致布局下沉
2021-06-04 11:35:25最近突然发现项目中实现了沉浸式状态栏的页面布局位置显示都出现了异常,像这样还好线上版本是正常的...= Build.VERSION_CODES.M) {activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FL... -
Android之setSystemUiVisibility总结
2019-12-07 16:14:38关于沉浸式体验模式,我们通常会在Activity,使用decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_XXXXX) 来设置,具体示例可以看这篇文章。 View 各种SYSTEM_UI_FLAG的总结 View.SYSTEM_UI_FLAG_... -
【Android】getWindow().getDecorView().setSystemUiVisibility(...)设置状态栏属性
2022-05-10 17:07:40代码 int vis = getWindow().getDecorView().... //这个一行代码主要是对状态栏进行设计 getWindow().getDecorView().setSystemUiVisibility(vis); 解析 setSystemUiVisibility()方法,这是View.java中的一个方法 -
DecorView的setSystemUiVisibility方法
2019-07-03 11:58:31开发中,通常都是在onCreate()中调用setContentView(R.layout.custom_layout)...想要更改一些高级一点的样式的话可以调用DecorView的setSystemUiVisibility方法,DecorView通过getWindow().getDecorView()获取,如下... -
setSystemUiVisibility传入参数说明
2020-03-25 11:59:19调用setSystemUiVisibility方法,该方法传入的参数可以为: View.SYSTEM_UI_FLAG_VISIBLE:显示状态栏,Activity不全屏显示(恢复到有状态的正常情况)。 View.INVISIBLE:隐藏状态栏,同时Activity会伸展全屏显示。 ... -
Android中View.setSystemUiVisibility参数详解
2018-02-12 17:10:20public void setSystemUiVisibility (int visibility) Request that the visibility of the status bar or other screen/window decorations be changed. This method is used to put the... -
Android setSystemUiVisibility() flag详解
2019-12-28 23:01:05View.SYSTEM_UI_FLAG_FULLSCREEN 全屏模式,占据整个屏幕,隐藏状态栏等界面,不过导航栏不会隐藏。如果用户进行操作,隐藏的系统界面会立马出现并清除该flag。 View.SYSTEM_UI_FLAG_HIDE_NAVIGATION ... -
View.setSystemUiVisibility(int) 方法使用
2019-04-13 14:41:00View.setSystemUiVisibility(int) 方法可传入的实参为: 1. View.SYSTEM_UI_FLAG_VISIBLE:显示状态栏,Activity不全屏显示(恢复到有状态的正常情况)。 2. View.INVISIBLE:隐藏状态栏,同时Activity会伸展全屏... -
Android setSystemUiVisibility(int visible)详解
2019-07-02 09:03:52** ** 可供选择的参数: ...SYSTEM_UI_FLAG_LOW_PROFILE ...getWindow().getDecorView()....getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION); -
getWindow().getDecorView().setSystemUiVisibility;
2019-07-12 20:54:28getActivity().getWindow().getDecorView().setSystemUiVisibility; getActivity().getWindow().getDecorView().getSystemUiVisibility; 参考资料: http://blog.csdn.net/stevenhu_223/article/details/12... -
getWindow().getDecorView().setSystemUiVisibility(...)设置状态栏属性
2020-12-14 16:57:25在本次项目中,又遇到了getWindow().getDecorView().setSystemUiVisibility设置状态栏属性的情况。 代码为在一个BaseActivity的onResume方法中调用一个自定义的fullscreen()方法,而这个fullscreen()方法具体实现... -
DecorView的setSystemUiVisibility方法和getSystemUiVisibility方法
2018-07-16 21:43:25setSystemUiVisibility(int visibility)方法可传入的实参为: 1. View.SYSTEM_UI_FLAG_VISIBLE:显示状态栏,Activity不全屏显示(恢复到有状态栏的正常情况)。 2. View.INVISIBLE:隐藏状态栏,同时... -
setSystemUiVisibility方法和getSystemUiVisibility方法
2018-03-12 15:19:002019独角兽企业重金招聘Python工程师标准>>...getActivity().getWindow().getDecorView().setSystemUiVisibility; getActivity().getWindow().getDecorView().getSystemUiVisibility; 参考资料: ... -
setSystemUiVisibility() 与 getSystemUiVisibility() 显示隐藏状态栏
2017-07-03 13:43:00View类提供了setSystemUiVisibility和getSystemUiVisibility方法,这两个方法实现对状态栏的动态显示或隐藏的操作,以及获取状态栏当前可见性。 setSystemUiVisibility(int visibility)方法可传入的实参为: ... -
【Android】setSystemUiVisibility() 问题汇总
2020-03-13 16:56:38全屏模式 setSystemUiVisibility() 场景 交互模式 回调 备注 向后倾斜模式 SYSTEM_UI_FLAG_FULLSCREEN SYSTEM_UI_FLAG_HIDE_NAVIGATION 1. 适用于用户不会与屏幕进行大量互动的全屏体验 1. 当用户希望调出系统栏时... -
setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION)导致的view第一次点击无效
2019-09-04 16:56:34最后注释掉这行代码getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION)就没得问题。 说明是setSystemUiVisibility方法导致了打开页面时焦点在导航上,从而使得view需要点击... -
Android setSystemUiVisibility()简单用法
2016-10-09 16:03:42Android setSystemUiVisibility()作用及简单用法 -
setSystemUiVisibility(int visibility)使用说明:
2018-11-27 14:04:41View.SYSTEM_UI_FLAG_VISIBLE:显示状态栏,Activity不全屏显示(恢复到有状态栏的正常情况)。 View.INVISIBLE:隐藏状态栏,同时Activity会伸展全屏显示。 View.SYSTEM_UI_FLAG_FULLSCREEN:Activity全屏显示,且... -
setSystemUiVisibility的流程(待整理中)
2018-11-30 00:28:30深入理解ANDROID 第3卷,... 为什么要走这样的流程:一直要走到PhoneStatusBar 是因为为了考虑一些flag,然后再将更新后的SystemUiVisibility 逐级的上传上去 为什么使用View 来设置?... -
Android 给view 设置setSystemUiVisibility 之后,每次点击事件监听不到
2016-08-12 15:10:17我给surfaceview 设置setSystemUiVisibility 事件之后,屏幕没有获取焦点时,点击其屏幕,他的点击事件都不响应。解决方法,setOnSystemUiVisibilityChangeListener( new View.OnSystemUiVisibilityChangeListener...