W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
編寫: spencer198711 - 原文:http://developer.android.com/training/backward-compatible-ui/new-implementation.html
這一課展示了如何編寫CompatTab和TabHelper等抽象類的子類,并且使用了較新的APIs。你的應(yīng)用可以在支持這些新的APIs的平臺版本的設(shè)備上使用這種實現(xiàn)方式。
CompatTab和TabHelper抽象類的具體子類是一種代理實現(xiàn),它們使用了使用較新的APIs。由于抽象類在之前的課程中定義并且是對新APIs接口(類結(jié)構(gòu)、方法簽名等等)的鏡像,使用新APIs的具體子類只是簡單的代理方法調(diào)用和方法調(diào)用的結(jié)果。
你可以在這些具體子類中直接使用較新的APIs,由于使用延遲類加載的方式,在早期版本的設(shè)備上并不會發(fā)生崩潰現(xiàn)象。這些類在首次次被訪問(實例化類對象或者訪問類的靜態(tài)屬性或靜態(tài)方法)的時候才會去加載并初始化。因此,只要你不在Honeycomb之前的設(shè)備上實例化Honeycomb相關(guān)的實現(xiàn),dalvik虛擬機都不會拋出VerifyError異常。
對于本實現(xiàn),一個比較好的命名約定是把具體子類需要的API等級或者版本名字附加在APIs接口的后邊。例如,本地tab實現(xiàn)可以由CompatTabHoneycomb
和abHelperHoneycomb
這兩個類提供,名字后面附加Honeycomb是由于它們都依賴于Android 3.0(API等級11)之后版本的APIs。
CompatTabHoneycomb
是CompatTab
抽象類的具體實現(xiàn)并用來引用單獨的tabs。CompatTabHoneycomb
只是簡單的代理ActionBar.Tab對象的方法調(diào)用。 開始使用ActionBar.Tab的APIs實現(xiàn)CompatTabHoneycomb:
public class CompatTabHoneycomb extends CompatTab {
// The native tab object that this CompatTab acts as a proxy for.
ActionBar.Tab mTab;
...
protected CompatTabHoneycomb(FragmentActivity activity, String tag) {
...
// Proxy to new ActionBar.newTab API
mTab = activity.getActionBar().newTab();
}
public CompatTab setText(int resId) {
// Proxy to new ActionBar.Tab.setText API
mTab.setText(resId);
return this;
}
...
// Do the same for other properties (icon, callback, etc.)
}
TabHelperHoneycomb
是TabHelper
抽象類的具體實現(xiàn),TabHelperHoneycomb
代理方法調(diào)用到ActionBar對象,而這個ActionBar對象是從包含他的Activity中獲取的。
實現(xiàn)TabHelperHoneycomb
,代理其方法調(diào)用到ActionBar的API:
public class TabHelperHoneycomb extends TabHelper {
ActionBar mActionBar;
...
protected void setUp() {
if (mActionBar == null) {
mActionBar = mActivity.getActionBar();
mActionBar.setNavigationMode(
ActionBar.NAVIGATION_MODE_TABS);
}
}
public void addTab(CompatTab tab) {
...
// Tab is a CompatTabHoneycomb instance, so its
// native tab object is an ActionBar.Tab.
mActionBar.addTab((ActionBar.Tab) tab.getTab());
}
// The other important method, newTab() is part of
// the base implementation.
}
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: