Android 4.0日历(calendar)源码分析之AllInOneActivity

泡在网上的日子 / 文 发表于2013-02-26 23:51 次阅读 calendar

Android 4.0日历(calendar)源码分析之概览  一文中我们讲到了AllInOneActivity在日历中的重要作用,这篇文章我们将对其进行代码层面的解读。

日历中90%以上的交互事件其实都是发生在AllInOneActivity中(虽然具体处理不是在这里),我们先来看看都有哪些事件。

1.切换视图的spinner事件

2.actionbar上的跳转到今天的按钮事件。

3.menu菜单中的新建,刷新,搜索,设置等菜单事件。

这些事件都很容易找到相应的事件处理代码。下面分别来说明。

切换视图的spinner事件

切换视图的spinner事件

只有在手机上才会显示切换视图的spinner,在平板上是用的选项卡(tab)的形式。下面的代码决定了到底是用tab还是spinner:

private void configureActionBar(int viewType) {
  
    if (mIsTabletConfig) {  //如果是平板
  
        createTabs();
  
    } else {              //否则在手机上用ButtonsSpinner
  
        createButtonsSpinner(viewType);
  
    }
  
    if (mIsMultipane) {
  
        mActionBar.setDisplayOptions(
  
                ActionBar.DISPLAY_SHOW_CUSTOM | ActionBar.DISPLAY_SHOW_HOME);
  
    } else {
  
        mActionBar.setDisplayOptions(0);
  
    }
  
}


createButtonsSpinner函数的实现是这样的,该函数也是在AllInOneActivity中,是一个私有方法。

 

    private void createButtonsSpinner(int viewType) {
  
        mActionBarMenuSpinnerAdapter = new CalendarViewAdapter(this, viewType);
  
        mActionBar = getActionBar();
  
        mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
  
        mActionBar.setListNavigationCallbacks(mActionBarMenuSpinnerAdapter, this);
  
        switch (viewType) {
  
            case ViewType.AGENDA:
  
                mActionBar.setSelectedNavigationItem(BUTTON_AGENDA_INDEX);
  
                break;
  
            case ViewType.DAY:
  
                mActionBar.setSelectedNavigationItem(BUTTON_DAY_INDEX);
  
                break;
  
            case ViewType.WEEK:
  
                mActionBar.setSelectedNavigationItem(BUTTON_WEEK_INDEX);
  
                break;
  
            case ViewType.MONTH:
  
                mActionBar.setSelectedNavigationItem(BUTTON_MONTH_INDEX);
  
                break;
  
            default:
  
                mActionBar.setSelectedNavigationItem(BUTTON_DAY_INDEX);
  
                break;
  
       }
  
}


 

CalendarViewAdapter是专门为了显示视图切换而定义的一个适配器类。

                                                            

待续

收藏 赞 (5) 踩 (3)
上一篇:Android开发中实现多点触控的方法
其实,Android应用程序开发中,多点触摸(Multitouch)不是那么遥不可及,实现起来也很简单。如果您对开发多点触摸程序感兴趣的话,那么本文将是一个很好的开始,本例只需要两个类就能实现多点触摸。 首先来看看我们的视图类MTView.java: package com.ideasa
下一篇:可复用的android代码之创建和使用Android library工程
今天在研究 actionbarsherlock 的时候,发现了一种叫做library的东西,其实这种方式在编程领域并不少见,只是第一次在android中遇到。 在网上找了一篇文章,分享给大家: 创建library供多个工程共享代码、资源是非常常见的需求,网上这种资料非常少,基本上