直播平台软件开发,Android SystemUI 导航栏动态显示隐藏

直播平台软件开发,Android SystemUI 导航栏动态显示隐藏

1、导航栏创建加载及隐藏:

 

1
<br> frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java<br>    ...<br>        try {<br>            // boolean showNav = mWindowManagerService.hasNavigationBar();<br>            // 添加自定义控制状态栏的 Settings.system 属性值,控制初始化时是否创建状态栏<br>            boolean showNav = Settings.system.getInt(mContext.getContentResolver(), "nav_bar_mode", 0) == 0;<br>            // 注册属性值变化监听<br>            mContext.getContentResolver().registerContentObserver(<br>                    Settings.System.getUriFor("nav_bar_mode"), false, new SettingsObserver(mHandler), UserHandle.USER_ALL);<br> <br>            if (DEBUG) Log.v(TAG, "hasNavigationBar=" + showNav);<br>            if (showNav) {<br>                createNavigationBar();<br>            }<br>        } catch (RemoteException ex) {<br>            // no window manager? good luck with that<br>        }<br>    ...<br> <br>    // 自定义 nav_bar_mode 属性值的监听<br>    private final class SettingsObserver extends ContentObserver {<br>        public SettingsObserver(Handler handler) {<br>            super(handler);<br>        }<br> <br>        @Override<br>        public void onChange(boolean selfChange, Uri uri) {<br>            int navMode = Settings.Secure.getInt(mContext.getContentResolver(), "nav_bar_mode", 0);<br>            Log.i("TAG", "navMode = " + navMode);<br>            switch (navMode) {<br>                case 0:<br>                    createNavigationBar();<br>                    break;<br> <br>                case 1:<br>                    mContext.getSystemService(WindowManager.class).removeView(mNavigationBarView);<br>                    break;<br> <br>                default:<br>                    Log.w(TAG, "Unknown mode");<br>                    break;<br>            }<br>        }<br>    }

 这里主要了解导航栏的加载是由系统的 WindowManager 加载,通过addView进行加载显示,所以我们也可以通过 removeView 去进行删除隐藏。

 

2、加载 view 的源码:

 

1
<br>frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java<br>    public static View create(Context context, FragmentListener listener) {<br>        WindowManager.LayoutParams lp = new WindowManager.LayoutParams(<br>                LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT,<br>                WindowManager.LayoutParams.TYPE_NAVIGATION_BAR,<br>                WindowManager.LayoutParams.FLAG_TOUCHABLE_WHEN_WAKING<br>                        | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE<br>                        | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL<br>                        | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH<br>                        | WindowManager.LayoutParams.FLAG_SPLIT_TOUCH<br>                        | WindowManager.LayoutParams.FLAG_SLIPPERY,<br>                PixelFormat.TRANSLUCENT);<br>        lp.token = new Binder();<br>        lp.setTitle("NavigationBar");<br>        lp.accessibilityTitle = context.getString(R.string.nav_bar);<br>        lp.windowAnimations = 0;<br>        View navigationBarView = LayoutInflater.from(context).inflate(<br>                R.layout.navigation_bar_window, null);<br>        if (DEBUG) Log.v(TAG, "addNavigationBar: about to add " + navigationBarView);<br>        if (navigationBarView == null) return null;<br>        context.getSystemService(WindowManager.class).addView(navigationBarView, lp);<br>        FragmentHostManager fragmentHost = FragmentHostManager.get(navigationBarView);<br>        NavigationBarFragment fragment = new NavigationBarFragment();<br>        fragmentHost.getFragmentManager().beginTransaction()<br>                .replace(R.id.navigation_bar_frame, fragment, TAG)<br>                .commit();<br>        fragmentHost.addTagListener(TAG, listener);<br>        return navigationBarView;<br>    }

 

以上就是 直播平台软件开发,Android SystemUI 导航栏动态显示隐藏,更多内容欢迎关注之后的文章

 

posted @   云豹科技-苏凌霄  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
历史上的今天:
2022-09-15 直播平台开发,附带干扰线的随机验证码
2022-09-15 直播平台搭建,javascript轮播图示例
2022-09-15 app直播源代码,html网站使用js实现记住账号密码功能
2021-09-15 短视频app开发,实现一个朴实的Canvas时钟效果
2021-09-15 直播视频app源码,自定义可点击可滑动的通用RatingBar
2021-09-15 直播源码APP的最佳扫码插件,实现自定义视图
点击右上角即可分享
微信分享提示