新しいバージョンのAPIが古いバージョンのAPIと完全に互換性があることを解決する方法

3295 ワード

原文:http://android.eoe.cn/topic/android_sdk
このコースでは、新しいバージョンのAPIに対応し、古いバージョンのAPIのサポートを維持できる実装クラスを作成する方法について説明します.
*代替ソリューションを探しています*
後方互換性を維持するためには、古いバージョンのプラットフォームのUIフレームワークの特性を使用して、新しいバージョンのUIフレームワークの特性を実現する必要があります.これは非常に挑戦的なタスクです.多くの場合、私たちはそれを完全に行うことができます.次の例を見てください.
  • Action bars_'ホリゾンタルで LinearLayout'''はあなたのActivity Layoutで実現して、このLinearLayoutは1つのカスタムのタイトルあるいはViewを追加することができて、''''image buttons'''を加えて、実行する動作は設備の'Menu button*で表示されます.

  • Action bar tabs_' 'horizontal LinearLayout''でボタンを付けるか'TabWidget UI*が実現します.

  • NumberPicker_'および''Switch''コンポーネントは''Spinner'''および'ToggleButton*コンポーネントはそれぞれ実装されています.

  • ListPopupWindow_'および''PopupMenu''コンポーネントは'PopupWindow*コンポーネントを実装します.


  • 一般的に、新しいUIコンポーネントを古いバージョンのデバイスに完全に移植できる完璧なスキームは見つかりません.この問題では、古いバージョンのデバイスを使用するユーザーは、新しいバージョンの設計モデルに慣れていない可能性があります.したがって,我々は実装時に同じ機能実装をできるだけユーザが熟知している方法で実現することを考慮しなければならない.多くの場合、この問題をあまり心配する必要はありません.この新しいUIコンポーネントがアプリケーション環境で優れている場合(例えば、*ActionBar_')、またはインタラクティブモードが非常に簡単で直感的である場合(例えば、'_SwipViews*アプリケーションなど) ViewPager).
    *以前のAPIによるTabs*の実装
    私たちはTabWidgetとTabHost(私たちも*horizontally laid-out_'を使うことができます)を使うことができます. Buttonコンポーネント)は''ActionBar''ラベルを実装します.Android 2.0(Eclair)以下のAPIsを使用しているので、実装クラスの名前は''''TabHelperEclair''''と'_と呼ばれています.CompatTabEclair* :
    ファイル:Backward-compatible-ui-classes-eclair.png
    図1:*Eclair*実装tabsのクラス図
    *CompatTabEclair*を実装する場合は、text、iconなど、変数にtabのプロパティを保存する必要があります.これらのプロパティを処理するのに役立つ既存のActionBar.Tabはありません.
    public class CompatTabEclair extends CompatTab {//Store these properties in the instance,//as there is no ActionBar.Tab object.private CharSequence mText;...
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public CompatTab setText(int resId) {
        // Our older implementation simply stores this
        // information in the object instance.
        mText = mActivity.getResources().getText(resId);
        return this;
    }
    
    ...
    // Do the same for other properties (icon, callback, etc.)
    

    }
    実装*TabHelperEclair_'TabHostコンポーネントを使用してTabHost.TabSpecオブジェクトと'_を作成する必要があります.tab indicators* :
    public class TabHelperEclair extends TabHelper {private TabHost mTabHost;...
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    protected void setUp() {
        if (mTabHost == null) {
            // Our activity layout for pre-Honeycomb devices
            // must contain a TabHost.
            mTabHost = (TabHost) mActivity.findViewById(
                    android.R.id.tabhost);
            mTabHost.setup();
        }
    }
    
    public void addTab(CompatTab tab) {
        ...
        TabSpec spec = mTabHost
                .newTabSpec(tag)
                .setIndicator(tab.getText()); // And optional icon
        ...
        mTabHost.addTab(spec);
    }
    
    // The other important method, newTab() is part of
    // the base implementation.
    

    }
    今は*CompatTab_'がありますおよび'TabHelper*の2つの実装クラスは、Android 3.0または更新されたバージョンのAPIsで使用され、Android 2.0または更新されたバージョンのAPIsで使用され、次のレッスンでは、このような2つの実装クラスをアプリケーションでどのように使用するかについて説明します.