状态栏

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的框架理解

 

对通知发送的理解

 

 

转载于:https://my.oschina.net/u/3491256/blog/910789

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值