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     ...
  • 相关阅读:
    杭电 1013 Digital Roots
    杭电 1040 As Easy As A+B 【排序】
    杭电 2092 整数解
    bzoj3223
    bzoj3224
    LA3905
    bzoj3601
    bzoj1002
    bzoj3105
    bzoj3332
  • 原文地址:https://www.cnblogs.com/androidsj/p/3929109.html
Copyright © 2011-2022 走看看