admin管理员组文章数量:1122849
状态栏
1.状态栏的启动
SystemUIService-->通过类的反射,加载SystemBars,并调用start()方法;
在SystemBars方法中,启动一个ServiceMonitor,并开启;这里使用服务监听器的原因是,用来监听是否启用了第三方的状态栏,如果需要使用第三方的,就停止系统状态栏,并绑定开启第三方状态栏的服务;
启用第三方状态栏的步骤:将第三方服务类名保存到contentprovider,contentprovider的Uri与Settings.Secure.BAR_SERVICE_COMPONENT有关,获取到这个类名后就尝试绑定服务,停止系统状态栏,开启第三方状态栏;
2.状态栏从整体上划分,可分为几大部分;
一是界面,包括正常状态栏,下拉状态栏和导航栏;
二是状态栏的滑动效果,包括正常状态栏和下拉状态栏的切换,以及下拉状态栏中各种形式的滚动效果实现,这是逻辑处理很复杂的一块;
三是对外界的回音,包括应用发送通知到状态栏,外界想隐藏状态栏,或者改变状态栏的属性等
关于界面,
状态栏并非显示在activity中,它是通过windowmanager将状态栏view添加到窗口,并设置窗口类型为TYPE_STATUS_BAR;
正常状态栏分为通知图标区域,系统图标区域,信号图标区域,时间区域和电量显示区域5个部分;
通知图标区域,当通知图标过多时,会显示更多图标,隐藏过多的通知图标;通知图标是自定义的ImageView,在图片上可绘制通知的数量;
系统图标区域,系统图标是保存在StatusBarIconList中,状态栏通过PhoneStatusBarPolicy与StatusBarManagerService进行交互改变图标状态,StatusBarManagerService又将系统图标的状态保存到StatusBarIconList中,并通知系统图标区域改变相应的view;
信号图标区域:这是一个自定义的LinearLayout,它当中有wifi,信号类型,信号强度等图标,通过NetworkController时时监听系统wifi,信号的改变;
时间区域:一个自定义的TextView,它内部注册了时间改变的广播,可以动态显示时间;
电量显示区域:电量显示,可以有多种方式去实现,一种是自定义view,重写draw()方法,另一种是使用drawableLevel去做动态图片,它也有一个广播,该广播时时监听了电量的改变;
正常状态栏除了以上内容之外,还有lights out和ticker,其中lights out是当状态栏设置了低分辨率才出现,它会影藏所有的通知图标,而ticker是指当有通知出现时,会有一条动态的内容实现;
关于下拉状态栏:
下拉状态栏主要分为两大部分
下拉事件的处理:
定制view
对View的框架理解
对通知发送的理解
转载于:
本文标签: 状态栏
版权声明:本文标题:状态栏 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/biancheng/1704030255a616688.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论