移动Android状态栏
我正在尝试将Android(Froyo)中的状态栏从屏幕顶部移动到屏幕底部。 我做了很多研究,但没有找到任何能够成功做到这一点的人。
旁注:我不想隐藏状态栏,我想移动它。 另外,我不担心状态栏是否无法再展开。 对于这个用例,它永远不需要。
这是我到目前为止所做的:
- 查看
systemui/res/status_bar.xml
中的status_bar.xml文件,但它似乎只在状态栏中定义了布局,而不是状态栏本身。 - 查看
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)
)。
- 在第267行附近,从R.layout.status_bar创建了
基于此,我将WindowManager.LayoutParams的重力更改为Gravity.BOTTOM。 这个DID在某种程度上起作用; 状态栏位于屏幕底部。 但是,通常显示在状态栏下方的所有其他内容仍位于状态栏下方 – 它会被推离屏幕底部。 就像屏幕的其余部分相对于状态栏一样。
任何人都可以提供任何有关我需要修改的内容的见解吗?
该问题的解决方案如下:
- 在
frameworks/base/services/java/com/android/server/status/StatusBarService.java
Gravity.TOP
Gravity.BOTTOM
更改为Gravity.BOTTOM
。 -
frameworks/policies/base/phone/com/android/internal/policy/impl/PhoneWindowManager.java
替换mDockTop = mContentTop = mCurTop = mStatusBar.getFrameLw().bottom
withmContentBottom = mCurBottom = mStatusBar.getFrameLw().top
。 - 在
frameworks/policies/base/mid/com/android/internal/policy/impl/MidWindowManager.java
第719行frameworks/policies/base/mid/com/android/internal/policy/impl/MidWindowManager.java
,用mCurTop = mStatusBar.getFrameLw().bottom
frameworks/policies/base/mid/com/android/internal/policy/impl/MidWindowManager.java
替换mCurTop = mStatusBar.getFrameLw().bottom
。
我在模拟器上对Froyo进行了测试,它工作正常。 状态栏位于底部,其他所有内容都位于其上方。 正如我上面提到的,对于我的用例,我永远不需要扩展状态栏,所以这对我来说已经足够了。 但是,正如@ jkhouw1所提到的,通过修改StatusBarService.java
的逻辑,特别是第1159行的performFling
方法,可以使状态栏向上扩展。
希望有人觉得这很有用!