ANDROID的ActionBar及菜单机制

http://www.apkbus.com/android-69132-1-1.html


                                                2 ActionBar菜单呈现部分
     图2
Action Bar相关视图对象的菜单呈现及菜单构建相关类图。
     Action Bar相关视图的菜单呈现及菜单构建类图包括负责菜单构建过程的菜单构建对象(MenuBuilder)、负责菜单容器及菜单项的视图创建的菜单呈现对象(MenuPresenter)、菜单容器和菜单项视图对象(view)三类对象构成,三类对象构成MVP模式。
         MenuBuilder对应MVP模式的modelMenuPresenter对应MVP模式的Presenter,视图对象对应ViewMenuBuilder构建菜单的每一菜单项。
MenuPresenterMenuBuilder对象读取菜单项并生成相应的菜单项子视图,创建的菜单项子视图被添加到菜单容器视图中,MenuPresenter也提供对MenuBuilder对象及其菜单项的获取及其它操作。视图通过MenuPresenter获得和操作菜单和菜单项对应的视图,在MVP模式中视图和模式不直接交互。
       ActionBar系统包括四个MenuPresenter具体类,ActionMenuPresenter负责Action  Button及Contextual Action Bar对应的菜单视图呈现,ExpandedActionViewMenuPresenter负责与菜单项绑定的Action View对象的视图呈现,OverflowPopup负责溢出菜单对应的视图呈现,ActionButtonSubmenu负责子菜单对应的视图呈现。OverflowPopup和ActionButtonSubmenu都派生自MenuPopupHelper,由于OverflowPopup呈现的菜单为MenuBuilder对象,ActionButtonSubmenu呈现的菜单对应SubMenuBuilder对象,因此MenuPopupHelper采用的MenuBuilder对象是一个适配器对象,采用了适配器模式对不同对象封装成相同的接口。
       图2 类图中MenuItemImpl类是对应菜单项的具体实现类。MenuBuilder对象创建的每一个MenuItemImpl类型的菜单项放在MenuBuilder对象的的数组中。
       MenuPopupHelper对象也登记为anchor视图的监听器,通过ViewTreeObserver对象来检测菜单所在anchor视图的变化。对于溢出菜单的anchor视图为OverflowMenuButton。
              1345890824_1273.jpg
                                    3  action provider提供部分
        图3 是系统提供的ShareActionProvider类及相关对象,提供快速存取提供
共享服务的Action
        整个类图主要包括ShareActionProviderActivityChooserModelActivityChooserViewActivityChooserViewAdapter等对象。
        派生自ActionProvider的具体类ShareActionProvider,用来实例化ActivityChooserModelActivityChooserView对象,并为ActivityChooserView对象设置数据模式,生成视图,操作和获取Model信息,根据Model信息创建活动菜单。
           ActivityChooserModelActivityChooserViewActivityChooserViewAdapter三者构成MVC模式,分别对应ModelView及采用Adapter模式的ControlActivityChooserView通过ActivityChooserViewAdapter获取ActivityChooserModel中的活动信息,ActivityChooserModel本身派生自DataSetObservable,可以在ActivityChooserView对象中为ActivityChooserModel对象登记一个DataSetObserver类型的对象,ActivityChooserModel对象通过该对象向ActivityChooserView对象发送ActivityChooserModel对象中的数据变化通知。
            ActivityChooserModel对于通过intent从包管理器中获得的符合intent条件的活动记录(以ActivityResolveInfo类型保存在数组列表中mActivites)的排序方法采用了策略模式,排序方法被封装成对象,在没有通过setActivitySorter方法设置排序方法时,采用默认排序方法,由DefaultSorter对象封装。DefaultSorter对象提供的排序方法是依据活动记录中的weight值进行排序,被排序的活动记录的weight值还依据记录在HistoricalRecordHistoricalRecord中的活动通过读私有的XML类型的共享历史文件获得)列表中的活动顺序进行修改,依据HistoricalRecord列表的从后往前的顺序为mActivites数组中对应的对象增加weight值,活动历史记录中越往后的记录在mActivites列表中对应活动增加的权值越小,最新的相应记录增加的权值越大。
           HistoryPersister线程对象用于把HistoricalRecord列表中的记录保存到历史文件中。HistoryLoader线程对象用于读取历史文件到HistoricalRecord列表中。DataModelPackageMonitor对象用于监视数据包,在数据包更新时同步活动记录列表mActivitesActivityChooserMode对象还通过Map类型的HashMap保证一个相同的历史文件只能实例化一个ActivityChooserModel对象,是单例模式的具体应用。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值