zoukankan      html  css  js  c++  java
  • 9、创建向后兼容的用

     抽象UI接口

    对于很多UI接口,不同版本的Android会提供不同的接口。例如, Tab,在Level = 11(Android3.0 Honeycomb)中使用ActionBar,而 在更低版本的Android中没有ActionBar,但可以用Tab控件代替。

    对于这些情况,如果要开发适应于所有版本的Android应用,就需 要对这些UI接口进行抽象。通常使用接口或抽象类。并利用多态满足不 同Android版本的需求。 

     创建一个Tag抽象类

     抽象ActionBar.Tab 

     1 public abstract class CompatTab {
     2     ...
     3     public abstract CompatTab setText(int resId); 
     4     public abstract CompatTab setIcon(int resId); 
     5     public abstract CompatTab setTabListener(
     6     CompatTabListener callback);
     7     public abstract CompatTab setFragment(Fragment fragment);
     8     public abstract CharSequence getText();
     9     public abstract Drawable getIcon();
    10     public abstract CompatTabListener getCallback(); 
    11     public abstract Fragment getFragment();
    12 ...
    13 }

     抽象TabHelper 

    1 public abstract class TabHelper {
    2       ...
    3      public CompatTab newTab(String tag) {
    4      // This method is implemented in a later lesson.
    5      }
    6      public abstract void addTab(CompatTab tab);
    7      ... 
    8 }

     新的API实现CompatTab 

     1 public class CompatTabHoneycomb extends CompatTab {       
     2         ActionBar.Tab mTab;
     3        ...
     4        protected CompatTabHoneycomb(FragmentActivity activity, String tag) { 
     5        ...
     6        mTab = activity.getActionBar().newTab(); }
     7        public CompatTab setText(int resId) { mTab.setText(resId);
     8        return this;
     9        }
    10 }

     新的API实现TabHelper 

     1 public class TabHelperHoneycomb extends TabHelper { 
     2       ActionBar mActionBar;
     3       ... ...
     4       protected void setUp() {
     5           if (mActionBar == null) {
     6                mActionBar = mActivity.getActionBar();         
     7                 mActionBar.setNavigationMode(
     8                    ActionBar.NAVIGATION_MODE_TABS); 
     9           }
    10       }
    11        ... ... 
    12 }

     用较早版本API实现Tabs 

    通常很难完全将新版本UI移植到老版本上,而且老版本的用户可能对 新版本的UI风格不习惯,所以应尽量使用老版本与新版本对应的UI。例如, 可以用TabWidget和TabHost来实现CompatTab和TabHelper。 

     检测当前的Android版本 

     1 public abstract class TabHelper { 
     2     ...
     3    public static TabHelper createInstance(FragmentActivity activity) {
     4         if (Build.VERSION.SDK_INT >=  
     5                      Build.VERSION_CODES.HONEYCOMB) {
     6              return new TabHelperHoneycomb(activity); 
     7         } else {
     8              return new TabHelperEclair(activity); 
     9         }
    10     }
    11     public CompatTab newTab(String tag) {
    12           if (Build.VERSION.SDK_INT >= 
    13                   Build.VERSION_CODES.HONEYCOMB) { 
    14              return new CompatTabHoneycomb(mActivity, tag);
    15           } else {
    16                return new CompatTabEclair(mActivity, tag);
    17           }  
    18     }
    19     ...
  • 相关阅读:
    Druid 使用 Kafka 将数据载入到 Kafka
    Druid 使用 Kafka 数据加载教程——下载和启动 Kafka
    Druid 集群方式部署 —— 启动服务
    Druid 集群方式部署 —— 端口调整
    Druid 集群方式部署 —— 配置调整
    Druid 集群方式部署 —— 配置 Zookeeper 连接
    Druid 集群方式部署 —— 元数据和深度存储
    Druid 集群方式部署 —— 从独立服务器部署上合并到集群的硬件配置
    Druid 集群方式部署 —— 选择硬件
    Druid 独立服务器方式部署文档
  • 原文地址:https://www.cnblogs.com/androidsj/p/3929109.html
Copyright © 2011-2022 走看看