2011-05-11 84 views
3

我試圖將Android(Froyo)中的狀態欄從屏幕頂部移動到屏幕底部。我做了很多研究,但沒有找到任何成功做到這一點的人。移動Android狀態欄

旁註:我不想隱藏狀態欄,我想移動它。另外,我不擔心狀態欄是否無法再擴展。對於這個用例,它永遠不需要。

這是我迄今所做的:

  1. 看着在systemui/res/status_bar.xml的status_bar.xml文件,但它似乎只定義佈局內的狀態欄,而不是狀態欄本身。
  2. 看着systemui\src\com\android\systemui\statusbar\StatusBarService.java文件。
    • 在第267行左右,從R.layout.status_bar創建一個StatusBarView(在上面提到的status_bar.xml文件中定義)。
    • 在第330行左右,WindowManager.LayoutParams被實例化並且重力被設置爲Gravity.TOP
    • 視圖和WindowManager.LayoutParams在addStatusBarView()的末尾的行341上傳遞給WindowManagerImpl.getDefault().addView(view, lp)

在此基礎上,我改變了WindowManager.LayoutParams到Gravity.BOTTOM的嚴重性。這DID工作在一定程度;狀態欄位於屏幕的底部。但是,通常在狀態欄下方顯示的其他所有內容仍位於狀態欄的下方 - 將其從屏幕底部推出。就好像屏幕的其他部分相對於狀態欄一樣。

任何人都可以提供任何我需要修改這個工作的見解嗎?

+0

你能提供到status_bar.xml的鏈接嗎? – Aleadam 2011-05-11 23:20:38

+0

@Aleadam這是status_bar.xml的URL:[status_bar.xml](http://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob;f=packages/SystemUI/RES /佈局/ STATUS_BAR。xml; h = a5d6885c6b907037fd57606dc1708e722819fe68; hb = refs/heads/master) – ianlh 2011-05-11 23:45:13

+0

我認爲你應該看看所有定義mExpandedParams的數學運算(我認爲它圍繞着1343行,並遵循performFling的腳步(約875行) – jkhouw1 2011-05-12 01:57:45

回答

5

的解決這個問題如下:

  1. 圍繞線345的frameworks/base/services/java/com/android/server/status/StatusBarService.java變化Gravity.TOPGravity.BOTTOM
  2. 約1265行frameworks/policies/base/phone/com/android/internal/policy/impl/PhoneWindowManager.javamContentBottom = mCurBottom = mStatusBar.getFrameLw().top替換mDockTop = mContentTop = mCurTop = mStatusBar.getFrameLw().bottom
  3. frameworks/policies/base/mid/com/android/internal/policy/impl/MidWindowManager.java的第719行,用mCurBottom = mStatusBar.getFrameLw().top代替mCurTop = mStatusBar.getFrameLw().bottom

我在模擬器的Froyo上測試了它,它工作正常。狀態欄位於底部,其他所有位置都在上面。正如我上面提到的,對於我的用例,我將永遠不需要擴展狀態欄,所以這對我來說已經足夠了。但是,正如@jkhouw1提到的那樣,可以通過修改StatusBarService.java中的邏輯,特別是在線路1159上的performFling方法來使狀態欄向上擴展。

希望有人認爲這有用!

+0

我無法理解我如何獲得該文件進行編輯? – Reyjohn 2012-07-10 19:38:28