2012-07-19 93 views
1

夠簡單,Android操作欄主頁

在操作欄的左上角坐落着應用程序的默認圖標。在大多數應用程序中,它會被點擊並返回到主頁。我正在使用2個設備,一個是3.2和2.3.3,我試圖在3.2上實現操作欄而不會影響其他設備。

我想象它是這樣實現的:

case android.R.id.home:    
     Intent intent = new Intent(this, ActOnThisActivity.class);    
     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     startActivity(intent);    
     return true; 

最後一件事就是設置標誌

getActionBar().setHomeButtonEnabled(true); 

這應該工作,但因爲任何人都熟悉Android的人都知道,這不能被運行一個11或以下的API。所以它會運行在3.2+而不是2.3.3上。有沒有辦法指定這種方法只適用於api11及更高版本?

請注意@TargetApi(11)註釋可能工作,但我有一些奇怪的錯誤。

+3

由於沒有在Android 2.3.3沒有行動起來吧,你在使用一個操作欄執行? ActionBarSherlock?還有別的嗎? – CommonsWare 2012-07-19 17:18:53

+0

@CommonsWare默認情況下,手機上沒有操作欄。它們被插入到選項菜單按鈕中。 – OVERTONE 2012-07-20 11:22:10

回答

1

有沒有辦法指定這種方法只能在api11及更高版本上工作?

if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.HONEYCOMB) { 
    getActionBar().setHomeButtonEnabled(true); 
} 
+0

不知道Build。***甚至存在。我敢肯定,如果我謹慎使用它,它會非常方便。謝謝 – OVERTONE 2012-07-20 11:58:59

1

看看sdk示例中的ActionBarCompat會給你如何去做的公平想法。

ActionBarHelper類中的以下代碼(來自示例)決定不同版本的實例。

public static ActionBarHelper createInstance(Activity activity) { 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { 
     return new ActionBarHelperICS(activity); 
    } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { 
     return new ActionBarHelperHoneycomb(activity); 
    } else { 
     return new ActionBarHelperBase(activity); 
    } 
} 
+1

當你可以使用'ActionBarSherlock'時,爲什麼要使用'ActionBarCompat' ...?幾乎每一種可能的方式都好得多。 – 2012-07-19 17:46:09

+0

@AlexLockwood ActionBarSherlock不是這個不幸的選擇。如果那時我的工作將完成:I – OVERTONE 2012-07-20 11:21:05

+1

請問爲什麼? :) – 2012-07-20 13:19:05

1

看看ActionbarSherlock - 我用它在幾個應用程序,它的工作原理完美無瑕。在Honeycomb(3.0)下的Android版本中完美模擬Action Bar。

http://actionbarsherlock.com/

與動作欄幾乎所有的互動主要API。這是確切的API getSupportActionBar()公開。

+0

已經跑了它的領先,他說這不是。長話但是有原因。無論如何欣賞答案 – OVERTONE 2012-07-20 11:20:34

+0

好吧 - 夠公平的。如果他確實改變了主意,那麼這可能是ActionBar支持下面最好的庫3.0 – mattdonders 2012-07-20 14:04:19