新しいバージョンの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;...
}
実装*TabHelperEclair_'TabHostコンポーネントを使用してTabHost.TabSpecオブジェクトと'_を作成する必要があります.tab indicators* :
public class TabHelperEclair extends TabHelper {private TabHost mTabHost;...
}
今は*CompatTab_'がありますおよび'TabHelper*の2つの実装クラスは、Android 3.0または更新されたバージョンのAPIsで使用され、Android 2.0または更新されたバージョンのAPIsで使用され、次のレッスンでは、このような2つの実装クラスをアプリケーションでどのように使用するかについて説明します.
このコースでは、新しいバージョンのAPIに対応し、古いバージョンのAPIのサポートを維持できる実装クラスを作成する方法について説明します.
*代替ソリューションを探しています*
後方互換性を維持するためには、古いバージョンのプラットフォームのUIフレームワークの特性を使用して、新しいバージョンのUIフレームワークの特性を実現する必要があります.これは非常に挑戦的なタスクです.多くの場合、私たちはそれを完全に行うことができます.次の例を見てください.
一般的に、新しい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つの実装クラスをアプリケーションでどのように使用するかについて説明します.