W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
編寫:spencer198711 - 原文:http://developer.android.com/training/backward-compatible-ui/abstracting.html
假如你想使用Action Bar Tabs作為你的應(yīng)用的頂層導航的主要形式。不幸的是,ActionBar APIs只在Android 3.0(API等級11)之后才能使用。因此,如果你想要在運行之前版本的Android平臺的設(shè)備上分發(fā)你的應(yīng)用,你需要提供一個支持新的API的實現(xiàn),同時提供一個回退機制,使得能夠使用舊的APIs。
在本課程中,使用了具有面向特定版本實現(xiàn)的抽象類去構(gòu)建一個tab頁形式的用戶界面,并以此提供向后兼容性。這一課描述了如何為新的tab API創(chuàng)建一個抽象層,并以此作為構(gòu)建tab組件的第一步。
在Java編程語言中,抽象包含了創(chuàng)建一個或者多個接口或抽象類去隱藏具體的實現(xiàn)細節(jié)。在新版本的Android API的情況中,你可以使用抽象去構(gòu)建能感知版本的組件,這個組件會在新版本的設(shè)備上使用當前的APIs,當回退到老的設(shè)備上同時存在兼容的APIs。
當使用這種方法時,你首先需要決定哪些要使用的類需要提供向后兼容,然后去根據(jù)新類中的public接口去創(chuàng)建抽象類。在創(chuàng)建抽象接口的過程中,你應(yīng)該盡可能多的為新APIs創(chuàng)建鏡像。這會最大化前向兼容性,使得在將來當這些接口不再需要的時候,廢棄這些接口會更加容易。
在為新的APIs創(chuàng)建抽象類之后,任何數(shù)量的實現(xiàn)都可以在運行的過程中去創(chuàng)建和選擇使用哪種。出于后向兼容的目的,這些實現(xiàn)可以通過所需的API級別而有所變化。一個實現(xiàn)可能會使用最新發(fā)布的APIs,而其他的則會去使用比較老的APIs。
為了能夠創(chuàng)建一個向后兼容的tabs,你首先需要決定你的應(yīng)用需要哪些功能和哪些特定的APIs接口。在頂層分節(jié)tabs的情況下,假設(shè)你有以下功能需求:
提前準備這些需求能夠讓你控制抽象層的范圍。這意味著你可以花更少的時間去創(chuàng)建抽象層的多個具體實現(xiàn),并很快就能使用這些新的后向兼容的實現(xiàn)。
Tabs的關(guān)鍵APIs是ActionBar和ActionBar.Tab,為了能夠使得tab能夠感知Android版本,這些是需要抽象出來的APIs。這個示例項目的需求要求同Eclair(API等級5)保持一致性,同時能夠利用Honeycomb(API等級11)中新的tab功能。一張展示能夠支持這兩種實現(xiàn)的類結(jié)構(gòu)和它們的抽象父類的圖顯示如下:
通過創(chuàng)建一個代表tab的抽象類來開始著手構(gòu)建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();
...
}
在這里,為了簡化諸如tab對象和Activity的聯(lián)系(未在代碼片段中顯示)等公共的功能,你可以使用一個抽象類而不是去使用接口。
下一步,定義一個能夠允許你往Activity中創(chuàng)建和添加tab抽象類,并定義類似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);
...
}
在下一課程中,你將會創(chuàng)建TabHelper和CompatTab的實現(xiàn),它能夠在新舊不同的平臺版本上都能工作。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: