Android6.0状态栏(系统下拉状态栏的定制)
■目标
不允许用户从上到下下拉状态栏
■案1
截获手势,不处理该手势。
SystemGesturesPointerEventListener
public void onPointerEvent(MotionEvent event) {
if (swipe == SWIPE_FROM_TOP) {
不调用手势处理}
■案1效果
无效果。
adb log发现代码确实走到了,说明这里只是一个通知机制。
■案2
在状态栏上进行中断手势或者touch命令
StatusBarWindowView的onInterceptTouchEvent方法实现进行修正,直接返回true。
■案2效果
符合预期
■状态栏知识点总结
家庭: 属于SystemUI级别。是特殊的系统级别的UI组件。SystemUI = 状态栏+底部导航栏+近期APP列表+截屏操作+电量警告等等
载体: 以APK形式存在
生命开始: AMS.systemReady()方法系统就绪后,startSystemUi
2兄弟布局: PhoneWindowManager.mHasSystemNavBar 状态栏与导航栏分离(PhoneStatusBar) vs 状态栏与导航栏合体(TabletStatusBar)
1儿子: BaseStatusBar 借助IStatusBarService处理请求 createAndAddWindows(各兄弟自己实现布局单元)
树形结构:
1@layout.super_status_bar(StatusBarWindowView)
1.1@id/status_bar(PhoneStatusBarView)
1.1.1 @id/status_bar_contents
1.1.1.1 @id/notification_icon_area
1.1.1.1.1 @id/more_icon
1.1.1.2 @id/system_icon_area
1.1.2 @id/ticker
1.2 PanelHolder
1.2.1 @layout/status_bar_expanded
1.2.2 @layout/quick_setting
言而总之:
状态栏包括两大部分。最上部固定栏 和 卷帘栏。
固定栏包括 通知窗口和 固定内容。固定内容包括系统固定图标和APP各通知图标。
卷帘包括 扩展栏(最近APP) 和快速设定。
补充:
带view的类都是和布局所一一对应的view。
不带view的类都是功能类。
例如:PhoneStatusBar类的两个成员( StatusBarWindowView mStatusBarWindow;honeStatusBarView mStatusBarView;)
PhoneStatusBar继承自那个BaseStatusBar。
http://blog.csdn.net/yin1031468524/article/details/51532663
https://wizardforcel.gitbooks.io/deepin-android-vol3/content/7.html
■目标
不显示状态栏
■案
将状态栏的高度修改为0
base/core/res/res/values/dimens.xml status_bar_height