SystemUIVisibility
最近在学习SystemUI时,涉及到了SystemUIVisibility,在此记录一下。虽然StatusBarManager以及StatusBarManagerService为应用程序以及系统服务提供了操作状态栏与导航栏的所有接口,但是这些接口并不适用于那些没有系统签名的普通应用程序。如果普通应用程序希望对状态栏以及导航栏进行操作,就需要使用SystemUIVisibility机制。
View.java
//隐藏导航栏
public static final int SYSTEM_UI_FLAG_HIDE_NAVIGATION = 0x00000002;
//隐藏状态栏
public static final int SYSTEM_UI_FLAG_FULLSCREEN = 0x00000004;
常见设置SystemUIVisibility的方式有两种。一是在任意一个已经显示在窗口上的控件调用View.setSystemUiVisibility(),二是直接在窗口的LayoutParams.systemUiVisibility上进行设置并通过WindowManager.updateViewLayout()方法使其生效。
SystemUIVisibility在系统中存在的地方
SystemUIVisibility主要涉及状态栏和导航栏的行为以及窗口布局两个方面。因此它的消费者包含SystemUI中BaseStatusBar以及负责窗口布局的PhoneWindowManger。
1 控件树中的SystemUIVisibility
View.setSystemUiVisibility()的实现
View.java
public void setSystemUiVisibility(int visibility) {
if (visibility != mSystemUiVisibility) {
//(1) 保存在View自己的成员变量mSystemUiVi