2012-04-11 71 views
9

我有一個MapView,動作欄由ActionBarSherlock提供動力。操作欄是分開的(在「窄」屏幕上)和覆蓋/半透明(android:windowActionBarOverlay爲true)。或多或少像谷歌地圖應用程序。確定動作欄是否被拆分

現在我想在地圖頂部推動視圖,在屏幕底部仍然保持它在底部操作欄上方。我的問題在於,我不知道底部操作欄的高度。坦率地說,我甚至找不到一種方法來知道它是否被繪製。 getHeight()似乎返回頂部操作欄的高度(或者也許是它們兩個的高度,但我仍然不知道底部操作欄是否存在或不存在)

請告訴我這些信息是否正確我的眼前!

回答

2

底欄應符合正規操作欄的高度。因此,使用?android:attr/actionBarSize(或ActionBarSherlock的情況下?attr/actionBarSize),用於在代碼中XML或getResources().getDimensionPixelSize(R.attr.actionBarSize)高度應該足夠了。

編輯:

呃,在你的問題的第二次閱讀,它似乎更側重於也確定是否存在拆分操作欄。

您可能需要閱讀這些答案和亞當·鮑威爾,行動起來吧大師的後續評論:

+0

是的,我也需要知道它是否存在。無論如何,我被告知(通過羅馬我認爲)在Android辦公時間,這根本是不可能的。至少不是簡單而直接的方式。因此,我們現在正在嘗試使用單個頂級操作欄,並使用常規視圖模仿底部操作欄。這不僅解決了這個問題,還解決了另一個問題,我們希望將某些操作「強制」到頂級操作欄。 – pakerfeldt 2012-04-18 11:29:24

3

我遇到了同樣的問題。在縱向模式的手機設備上,操作欄被分割。因此,菜單項位於頂部的操作欄中,下面的第二個操作欄(tabbar)中的選項卡。我只是沒有找到任何可能的方法來確定操縱桿的高度:在構建屏幕之前查看屏幕上剩餘的空間。

所以我做了一個假設:

  • 小和正常屏幕尺寸設備的動作條在肖像模式分爲大屏幕尺寸設備(如Nexus 7)的動作條也被分割在縱向模式
  • 上XLARGE屏幕尺寸的裝置(片劑)的動作條未在縱向模式分割

所以我區分不同screensizes和創建一個bool資源

<!-- res/values/booleans.xml --> 
<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <bool name="is_split_actionbar">false</bool> 
</resources> 

<!-- res/values-small-port/booleans.xml 
    res/values-normal-port/booleans.xml 
    res/values-large-port/booleans.xml --> 
<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <bool name="is_split_actionbar">true</bool> 
</resources> 

在代碼中,我訪問值這樣的:

Boolean isSplit = getResources().getBoolean(R.bool.is_split_actionbar); 

爲了讓動作條的高度在onCreateView()方法:

TypedValue typedVal = new TypedValue(); 
getActivity().getTheme().resolveAttribute(R.attr.actionBarSize, typedVal, true); // use android.R when not using ABS 
int actionBarHeight = getResources().getDimensionPixelSize(typedVal.resourceId); 

和雙重高度,如果動作條分割:

if(isSplit) 
    actionBarHeight = actionBarHeight * 2; 

這不是一個理想的解決方案,但對我來說這是可行的。

+0

解決方案的最接近答案。 – 2013-01-29 16:58:24

+2

在我看來,這個假設是基於一個錯誤的前提:我的操作欄在Nexus 4上拆分,但不在Nexus 7上。 – 2013-02-20 15:04:33

+0

它在Nexus 7 API 25 Android Studio仿真器上也沒有拆分。 – isabsent 2017-09-09 07:01:10

5

如果您正在使用ActionBarSherlock你可以看看abs__split_action_bar_is_narrow

布爾值,只需創建因爲一些靜態方法,你可以做

return ResourcesCompat.getResources_getBoolean(context, 
          R.bool.abs__split_action_bar_is_narrow); 

您需要使用ResourcesCompat(從actionbarsherlock)課前3.2不能讀取帶有指標的文件夾(如values-sw480)

+0

這仍然在API 3.1 +?即如果ActionBarSherlock實際上是使用本機操作欄? – 2013-01-29 16:58:06

+0

@CarlosP是的,它工作在Galaxy Nexus 4.2.2上 – 2013-03-07 17:49:43

+0

感謝您報告回來,感謝它 - 希望能夠幫助其他用戶。 – 2013-03-07 17:53:00