2013-01-04 51 views
5

我有一個拆分動作欄,頂部欄黑暗,底部欄(分割)較淺。如何知道Android操作欄的動作圖標是否位於頂部欄或底部欄(分割)?

因此,我想要顯示一個對比度動作圖標:頂部暗條中的光圖標和底部光條中的黑色圖標。

問題是知道是否應該在頂部或底部的欄上繪製動作。我怎麼知道?

另一種方法是瞭解操作欄是否當前已拆分。我如何知道這一點?

謝謝。

+0

由於溢出圖標,使用對比條進行分割時出現困難。操作圖標可以更改,但溢出不能。看問題:http:// stackoverflow。com/questions/13934825/how-to-change-the-overflow-button-when-in-cab –

回答

8

簡單。你使用布爾值。默認情況下,如果屏幕寬度小於400dp,則會有一個拆分的ActionBar。因此,在你的價值觀文件夾,你可以把:

/values/bools.xml:

,並在你的價值觀,sw400dp你把以下內容。

/values-sw400dp/bools.xml:

<resources> 
    <bool name="split_action_bar">false</bool> 
</resources> 

現在,您可以根據該值設置你的圖標:

boolean isActionBarSplitted = getResources().getBoolean(R.bool.split_action_bar); 
if(isActionBarSplitted){ 
     // set light icon 
} 
else{ 
    // set dark icon 
} 

編輯:

其實忘記我寫的東西,你不需要創建自己的布爾值來檢查它。已經有一個聲明(這是ActionBar用來確定它是手機設備還是平板電腦的)。 如果您的目標是Android HC +,那麼您可以訪問默認的ActionBars值: android.R.bool.split_action_bar_is_narrow,如果您使用的是ActionBarSherlock: R.bool.abs_split_action_bar_is_narrow。 找到here爲默認的ActionBar,here您的ABS。

+1

謝謝。你怎麼知道它是400dp? –

+0

我挖槽Android的源代碼 – Ahmad

+0

哇,太棒了。你能分享一下班級和方法的名字嗎? –

0

這取決於您正在使用的庫。

對於新程序兼容性:檢查R.bool.abc_split_action_bar_is_narrow值:

boolean split = getResources().getBoolean(R.bool.abc_split_action_bar_is_narrow); 

對於ActionBarShelock:從庫中導入ResourcesCompat類並調用:

boolean split = ResourcesCompat.getResources_getBoolean(this, R.bool.abs__split_action_bar_is_narrow); 

如果你不」 t使用任何圖書館,那麼你可以去艾哈邁德的答案,但只有如果你不使用圖書館。這是因爲他們使用不同的值。如果寬度低於400dp,android框架似乎會拆分欄,但對於appcompat和ABS則爲480dp。

相關問題