AndroidO Launcher3 shortcut悬浮窗设计

来源:互联网 发布:尽知天下事前面一句 编辑:程序博客网 时间:2024/05/17 08:11

# AndroidO Launcher3 shortcut悬浮窗设计

长按桌面图标会弹出一个小的悬浮窗,没有个合适的名字 ,叫dialog会显得俗,叫悬浮窗也不能凸显它的功能,想了想还是暂且叫shortcut悬浮窗吧。它的功能是提供给用户一种快捷方式,比如快速打开应用的某个功能,查看应用提供的widget,查看通知等。

这里写图片描述

shortcut悬浮窗的特点

  • 位置由被点击的icon的位置确定,在图标上方或下方
  • 悬浮窗跟icon是左对齐或右对齐
  • 悬浮窗的高度由其内容决定
  • 指向icon的小箭头总是指向icon
  • 圆角矩形边框

实现该功能的核心类

  • PopupContainerWithArrow:悬浮窗实际就是一个自定义view,PopupContainerWithArrow就是它的实现类,它继承自AbstractFloatingView
  • AbstractFloatingView: 继承自LinearLayout
  • PopupDataProvider:为悬浮窗提供数据
  • ShortcutsItemView:悬浮窗显示的每一个item就是ShortcutsItemView,它是数据的载体,继承自PopupItemView
  • PopupItemView: 继承自FrameLayout的抽象类
  • DeepShortcutManager: 数据管理类,负责查询应用对应的shortcuts以及把shortcuts钉在桌面上
  • PopupPopulator: 决定哪些shortcut可以被显示以及显示的顺序
  • SystemShortcut: 包括widget和 AppInfo shortcut

悬浮窗的设计属于MVC设计模式,PopupDataProvider是Model, PopupContainerWithArrow是View, DeepShortcutManager是Controller。

整体过程分析

用户长按桌面应用图标,该长按事件在Launcher里处理,再经过Workspace的处理最后会调用PopupContainerWithArrow的showForIcon方法来显示悬浮窗。在showForIcon里通过PopupDataProvider获取要应用的shortcuts(包括静态和动态的shortcuts),系统shortcuts(当前只有widget和AppInfo shortcut,其中AppInfo shortcut只有开启了debug模式才会有)以及应用的通知Keys(用来获取当前应用的通知数量),这些数据肯定不会全部显示,需要进一步进行筛选及排序。下面将从具体的几个细节进行分析,暂且先列个提纲,后面补充。

获取应用对应shortcut的过程

shortcut分类及排序

悬浮窗位置计算

暂且写到这里,后续补充。

原创粉丝点击