getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_STABLE 是在AOSP 11中哪里处理的
时间: 2024-04-03 14:35:19 浏览: 109
在AOSP 11中,getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE)的处理方式与之前版本的处理方式基本相同,仍然是在PhoneWindow类中处理。
具体地说,在PhoneWindow类的setDecorView方法中,会调用WindowManager的addView方法将Activity的布局添加到Window中,并设置相应的系统UI标志位,其中就包括View.SYSTEM_UI_FLAG_LAYOUT_STABLE标志。这个标志位的作用仍然是在布局时考虑状态栏和导航栏的大小,使得布局稳定不会因为状态栏和导航栏的变化而发生抖动。
需要注意的是,AOSP 11中可能会对setSystemUiVisibility方法的使用做出一些限制,例如在全屏模式下可能无法使用该方法。但是,这个限制与View.SYSTEM_UI_FLAG_LAYOUT_STABLE标志位的处理方式没有直接关系。
相关问题
getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_STABLE 是在AOSP 中哪里处理的
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE)是在Android Framework中的PhoneWindow类中处理的。
在PhoneWindow类中,有一个名为"setDecorView"的方法,它是在Activity的onCreate方法中被调用的。setDecorView方法的作用是将Activity的布局添加到Window中,并设置相应的系统UI标志位。
在setDecorView方法中,会调用WindowManager的addView方法将Activity的布局添加到Window中,并设置相应的系统UI标志位。其中就包括View.SYSTEM_UI_FLAG_LAYOUT_STABLE标志,它表示在布局时要考虑状态栏和导航栏的大小,使得布局稳定不会因为状态栏和导航栏的变化而发生抖动。
View decorView = mInstance.getWindow().getDecorView(); decorView.setSystemUiVisibility(0); decorView .setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);含义
这段代码的含义是设置当前窗口的系统UI显示模式,使其可以显示全屏的内容。其中:
- `setSystemUiVisibility(0)` 表示取消所有的系统UI可见性设置,即系统UI将会显示。
- `setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN)` 表示设置系统UI的可见性,包括两个参数:
- `View.SYSTEM_UI_FLAG_LAYOUT_STABLE` 表示布局稳定模式,在状态栏或导航栏隐藏时,布局不会因为UI的改变而重新布局,保持稳定。
- `View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN` 表示全屏模式,将布局扩展到状态栏区域,使得内容可以占据整个屏幕。
阅读全文