抽象新的API

作者: rain 分类: 移动 发布时间: 2012-04-20 19:51 6 条评论

假设您想在程序中使用action bar tabs作为主要的导航方式。
不幸的是,ActionBar API只有在3.0+版本中才能使用。所以如果您想让您的应用也能运行到旧的设备中,您需要想办法支持旧的系统。

在本示例中,您将创建一个tab UI控件接口,该接口在不同的Android版本中使用不同的实现方式。本课程介绍如何创建这样一个抽象接口。

研究抽象接口

Abstraction 在Java语言中意味着隐藏实现细节。在使用新的API时,可以使用抽象机制来
创建一个版本相关的控件,该控件在新版本中使用新API,在旧版本中使用旧API。

当使用这种方式的时候,您需要确定在旧版本中需要使用那些新版本的特性,然后基于新的接口来创建一个抽象类。在定义新的抽象接口的时候,应该尽可能的反映出新的特性(尽可能的复制新的API定义)。这样可以尽可能的向前兼容,并且当某一天您觉得不再需要抽象层的时候很容易的切换回来。

一旦为新的API创建了抽象接口后,就可以定义多个实现类并且在运行时来选择使用那个实现方式。不同的API level对应的实现方式可能不一样。

创建抽象后的Tab接口

为了创建向后兼容版本的tabs,需要首先定义您的程序需要哪些特性和具体的API。在这里的顶部导航tab中,我们 假设有如下特性:

  1. Tab 指示器,包含文字和图片
  2. Tabs 可以和Fragment关联起来
  3. Activity 应该可以监听到Tab切换事件

预先准备这些需求可以让你精确的控制抽象层的范围。这意味着您可以使用较少的时间创建多个抽象层实现,并且尽可能早的使用兼容性的实现。

这里用于Tabs的关键API为 ActionBar
ActionBar.Tab
您需要抽象这些API来使您的Tabs和系统版本关联起来。这个项目中需要支持Eclair (API level 5) 同时能够使用Honeycomb (API Level 11)版本中的新特性。下图显示了该抽象API在
这两种版本中的具体实现关系图。

抽象 ActionBar.Tab

创建您的抽象tab类,该类的函数基本和 ActionBar.Tab 接口一样:

这里使用抽象类而不是接口是为了简化实现一些常规的功能。具体详细情况参考示例项目中的完整代码。

抽象 ActionBar Tab 的函数

然后,定义一个抽象类,该类可以创建和添加tabs到Activity中。 和ActionBar.newTab()ActionBar.addTab()一样:

然后就可以创建 TabHelperCompatTab 的具体实现了,不同的版本中会使用不同的实现类。

本文出自 云在千峰,转载时请注明出处及相应链接。

本文永久链接: http://blog.chengyunfeng.com/?p=402

Ɣ回顶部