Android源码笔记--SystemUIVisibility

本文探讨了Android中SystemUIVisibility的控制机制,通过View.setSystemUiVisibility()方法的实现,详细解析了如何在控件树中传递和收集SystemUIVisibility属性,涉及到ViewRootImpl.collectViewAttributes()方法的作用,以及如何影响到WMS中的.subtreeSystemUiVisibility和LayoutParams.systemUiVisibility字段。
摘要由CSDN通过智能技术生成

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值