0
作爲我正在開發的應用程序的一部分,我試圖獲取對ActionBar
的容器視圖的引用。我使用了this question的答案,只要所涉及的Android設備運行API級別11或更高,它就可以很好地工作。但是,應用程序需要在API級別9(目標API級別爲19)的基礎上工作,並且薑餅設備給我帶來了問題。我最初使用Sherlock進行該項目,但最近改用了v7 compat庫。我可以在薑餅設備(按鈕工作等)上以常規方式查看並與操作欄進行交互,但在嘗試獲取容器時失敗。我正在使用的代碼是這樣的(注意 - 它的ActionBarActivity
一個子類中運行):獲取v7兼容ActionBarContainer
private FrameLayout getActionBarContainer() {
FrameLayout result = null;
int resId = getResources().getIdentifier("action_bar_container", "id", "android");
try {
result = (FrameLayout)getWindow().getDecorView().findViewById(resId);
}
catch (Exception e) {
// If we get an exception, just eat it
}
return result;
}
要回答幾個問題,他們會被問到之前:
- 渣油解析爲一個正確的ID值在v11設備上運行,但在v11之前的設備上解析爲0。
- 使用此代碼有適當的檢查來處理空結果,這就是爲什麼我只是吃例外。 try/catch塊大多隻是在那裏,由於一些怪異的發生,
ClassCastException
設法得到拋出(它永遠不應該,因爲容器是FrameLayout
的子類)。 - 我檢查並重新檢查了我的進口;我所有的
ActionBar
引用(以及所有相關的東西,比如我正在擴展的ActionBarActivity
超類)都是v7 compat庫版本,而不是標準庫版本。 action_bar_container
ID應存在於v7 compat庫中,if this is any indication。
我在這一點上大概沒有想法。有沒有簡單的我失蹤?任何建議,將不勝感激,如果你需要更多的上下文/澄清,讓我知道。
你,先生,是一個紳士和學者。這完美地完成了這個技巧。謝謝! – Alex