(二)进阶练习____10、创建向下兼容UI——抽象新的API

负责人:ziggurat

原文链接:http://docs.eoeandroid.com/training/backward-compatible-ui/abstracting.html

目录

 [隐藏

抽象化新的API特性

假设你想在你的应用中用action bar tabs作为顶级导航的基本形式,不幸的是,ActionBar APIs只能在 Android 3.0 或以后的版本(API Level 11+)中支持。因此,如果的你应用想在较早版本的平台上运行的话,你的应用的实现方式需要在支持新版本的API的同时也要支持老版本API。

在这节课程中,我们构建一个标签用户接口组件,这是一个可以用指定方式实现的向后兼容的抽象类。这一节将讲述创建标签组件的第一步——如何为新的tab API创建抽象层

关于抽象的准备知识

在Java编程语言中,抽象化系指一个或多个接口,或者是抽象类隐藏了他们的具体实现。对于较新版本的Android平台,你可以利用抽象化来构建可以识别版本的组件,在新版本的设备上使用用新版本的API实现。

在使用这种方法时,你首先要确定你要实现向后兼容的新版本类,然后基于这个新类的公共接口创建一个抽象类。在定义抽象类(或接口)时,你应该尽可能多的与新的接口所定义的方法保持一致,最大限度的向前兼容,在将来不需要这个抽象层时也能够轻易的去掉。

这些为新的API构建的抽象类创建以后,在运行时我们可以创建和选择任意数量的实现类。为了达到向后兼容的目的,这些实现类能够根据API Level进行判断,因此,应用中的实现方式可以依据API Level来选择使用最近发布的API,或者使用较早版本的API。

创建一个抽象的Tab接口

为了创建一个向后兼容的Tabs版本,你首先要考虑在你的应用中需要哪些特性和API。对于顶层的Tabs,假设你的应用有如下的功能需求:

1.Tab显示需要显示文本和图标

2.这些Tab能够与fragment实例联合在一起使用

3.activity能够监听tab发生变化时的事件

事先定义好这些需求可以帮助你控制抽象层所实现的范围,这就意味着你能很快的创建一个新的实现并且很快的使用这些向后兼容的实现方法。 ActionBar 和 ActionBar.Tab 是Tabs两个重要的APIs,为了能够做到版本识别(Version-Aware),这些APIs是需要抽象的。 这个示例工程需要向后兼容Eclair (API level 5)并且还应该具有Honeycomb (API Level 11)的新的优点和特性,下图是满足这个需求的类结构图:

Backward-compatible-ui-classes.png

图1:抽象基类和具体实现类图

抽象ActionBar.Tab

下面开始构建你的抽象层,创建一个抽象类来显示一个Tab,这个抽象类的功能类似 ActionBar.Tab 接口: 

public abstract class CompatTab {
    ...
    public abstract CompatTab setText(int resId);
    public abstract CompatTab setIcon(int resId);
    public abstract CompatTab setTabListener(
            CompatTabListener callback);
    public abstract CompatTab setFragment(Fragment fragment);
 
    public abstract CharSequence getText();
    public abstract Drawable getIcon();
    public abstract CompatTabListener getCallback();
    public abstract Fragment getFragment();
    ...
}

抽象ActionBar Tab 方法

接下来,我们需要创建一个抽象类来将Tabs创建和添加到一个activity,就像 ActionBar.newTab() 和ActionBar.addTab()

public abstract class TabHelper {
    ...
 
    public CompatTab newTab(String tag) {
        // This method is implemented in a later lesson.
    }
 
    public abstract void addTab(CompatTab tab);
 
    ...
}

在接下来的课程里,我们将遵循向后兼容的原则来实现TabHelperCompatTab 。

 

posted @ 2014-07-30 17:23  ╰→劉じ尛鶴  阅读(142)  评论(0)    收藏  举报