android系统状态栏与虚拟键导航栏与标题栏控制

xiaoxiao2021-02-27  268

状态栏与虚拟键


注意的是,低版本系统中是没有虚拟键盘的。

高版本系统中通过decorView控制状态栏与虚拟键导航栏:

如SDK>=16系统中隐藏状态栏代码如下:

if (Build.VERSION.SDK_INT >= 16) { View decorView = getWindow().getDecorView(); decorView.setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_FULLSCREEN); }

常见的设置有以下几个:

View.SYSTEM_UI_FLAG_FULLSCREEN; //全屏,状态栏视图不显示 View.SYSTEM_UI_FLAG_HIDE_NAVIGATION; //隐藏导航栏视图 View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN; //全屏,状态栏布局隐藏不显示 View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION; //隐藏导航栏布局 View.SYSTEM_UI_FLAG_LAYOUT_STABLE;//稳定模式,相当于对布局设置fitSystemWindows View.SYSTEM_UI_FLAG_LOW_PROFILE;//低轮廓模式,多用于游戏、视频、阅读器等应用中 View.SYSTEM_UI_FLAG_VISIBLE;//显示状态栏和导航栏

View.SYSTEM_UI_FLAG_LAYOUT_STABLE说明

带有LAYOUT的是针对布局的,比如View.SYSTEM_UI_FLAG_HIDE_NAVIGATION是隐藏导航栏,可是导航栏所在的布局不会隐藏还是会保留的,应用content内容大小没有变化,导航栏位置还是存在,类似于对view设置INVISIABLE,如果同时设置了View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN是隐藏整个布局,类似与设置GONE的效果,应用内容content布局大小会改变。

View.SYSTEM_UI_FLAG_LAYOUT_STABLE:设置了这个后,内容布局是自适应的,效果类似于:

android:fitsSystemWindows="true"

如果要完全隐藏,应用内容布局自动占据调要隐藏的布局,必须要设置这个才会生效,不然不会起效的,比如你设置了:

View.SYSTEM_UI_FLAG_FULLSCREEN

你会发现它与以下的设置是一样的效果,状态栏是不可见了,但是它 的位置保留着(就是状态栏显示空白或者透明)。

一起设置下面的两个:

View.SYSTEM_UI_FLAG_LAYOUT_STABLE| View.SYSTEM_UI_FLAG_FULLSCREEN

状态栏完全消失,应用内容大小适应了屏幕大小。说明这个参数是告诉系统,我想内容布局自适应起来。


带LAYOUT是说明:

对于带layout的设置指的是布局隐藏,比如View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN:设置了这个后,状态栏布局会隐藏调,但是状态栏还是可见的,只是应用内容布局会伸缩适应全屏。 View.SYSTEM_UI_FLAG_FULLSCREEN:设置了这个后,状态栏视图会隐藏,内容布局大小不变。


下面是测试的一些效果:


* View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN* 状态栏视图可见,布局被隐藏,应用内容大小高度增加了状态栏的高度,标题栏视图与布局存在。


View.SYSTEM_UI_FLAG_FULLSCREEN

状态栏视图不可见,布局存在,应用内容大小高度没有变化,标题栏视图与布局存在。


View.SYSTEM_UI_FLAG_LAYOUT_STABLE| * View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN*

状态栏与标题栏视图可见,布局被隐藏,应用内容大小高度增加了状态栏与标题栏的高度。


View.SYSTEM_UI_FLAG_LAYOUT_STABLE| * View.SYSTEM_UI_FLAG_FULLSCREEN* 状态栏与标题栏视图不可见,状态栏布局存在,标题栏布局不存在,应用内容大小高度增加了标题栏高度。

标题栏控制

代码隐藏标题栏:

requestWindowFeature(Window.FEATURE_NO_TITLE);

通过activity主题控制:

android:theme="@style/android:Theme.Light.NoTitleBar"

下面实现爱掌阅读阅读器的效果:进入阅读器界面是,沉浸式,就是全屏,标题栏状态栏全部去掉,点击中间菜单,显示菜单时同时显示状态栏,状态栏是覆盖在阅读器view上面的,点击菜单消失,状态栏消失。

requestWindowFeature(Window.FEATURE_NO_TITLE); //去掉标题栏 if (Build.VERSION.SDK_INT >= 16) { View decorView = getWindow().getDecorView(); decorView.setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_STABLE|//启动界面自适应 View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|//去掉状态栏布局 View.SYSTEM_UI_FLAG_FULLSCREEN//去掉状态栏视图 |View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION |View.SYSTEM_UI_FLAG_LOW_PROFILE);//低能模式 }

注意这个要放在setContentView之前;

点击菜单时:

if (Build.VERSION.SDK_INT >= 16) { View decorView = getWindow().getDecorView(); decorView.setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|//去掉状态栏布局 View.SYSTEM_UI_FLAG_VISIBLE//显示正常,显示状态栏与虚假键 ); }

菜单消失时:

if (Build.VERSION.SDK_INT >= 16) { View decorView = getWindow().getDecorView(); View.SYSTEM_UI_FLAG_LAYOUT_STABLE|//启动界面自适应 View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|//去掉状态栏布局 View.SYSTEM_UI_FLAG_FULLSCREEN//去掉状态栏视图 |View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION |View.SYSTEM_UI_FLAG_LOW_PROFILE);//低能模式 }
转载请注明原文地址: https://www.6miu.com/read-7369.html

最新回复(0)