移动安卓状态栏

3
我正在尝试将Android(Froyo)中的状态栏从屏幕顶部移动到屏幕底部。我已经进行了大量研究,但没有找到任何成功实现此操作的人。
附注:我不想隐藏状态栏,我想移动它。此外,如果无法再展开状态栏也无关紧要。对于这种情况,它永远不需要展开。
到目前为止,我已经完成了以下内容:
1.查看systemui/res/status_bar.xml文件,但它似乎只定义了状态栏内的布局,而不是状态栏本身。
2.查看systemui/src/com/android/systemui/statusbar/StatusBarService.java文件。 - 在267行左右,从R.layout.status_bar(在上面提到的status_bar.xml文件中定义)创建一个StatusBarView。 - 在330行左右,实例化WindowManager.LayoutParams并将gravity设置为Gravity.TOP。 - 在addStatusBarView()的末尾的341行,将视图和WindowManager.LayoutParams传递给WindowManagerImpl.getDefault().addView(view, lp)。
基于此,我将WindowManager.LayoutParams的gravity更改为Gravity.BOTTOM。这确实在某种程度上起作用;状态栏位于屏幕底部。然而,所有通常显示在状态栏下方的内容仍然在状态栏下方 - 它被推到了屏幕底部。就好像整个屏幕相对于状态栏定位一样。
有人能提供任何关于我需要修改什么才能使其正常工作的见解吗?

你能提供 status_bar.xml 的链接吗? - Aleadam
@Aleadam 这是status_bar.xml的URL链接:status_bar.xml - ianlh
我认为你应该查看定义mExpandedParams的所有数学内容(我认为大约在第1343行及以后)。同时,请跟随performFling的步骤(大约在第875行附近)。 - jkhouw1
@jkhouw1 感谢您的回复,但除非我弄错了,您提到的代码与展开状态栏的过程有关,而不是移动它。我需要将整个状态栏移动到底部,这样它就永远不会被展开。 - ianlh
抱歉,我没有看到关于不关心扩展的部分:我以为您成功移动了状态栏,并且实际上需要扩展向上展开以在其上方。状态栏下面唯一的东西是图标和其他的主屏幕等等,所以所有这些都会被推到它下面吗? - jkhouw1
@jkhouw1 是的,我成功地将状态栏移动到了底部,但现在我的问题是主屏幕上的其他内容(所有其他东西 - 图标、背景、小部件等)都被推到了状态栏下面的屏幕之外。本质上,我正在寻找一种移动“其他所有内容”容器的方法,使其位于状态栏的上方而不是下方。 - ianlh
1个回答

5
解决此问题的方法如下:
  1. frameworks/base/services/java/com/android/server/status/StatusBarService.java文件的第345行左右,将Gravity.TOP改为Gravity.BOTTOM
  2. frameworks/policies/base/phone/com/android/internal/policy/impl/PhoneWindowManager.java文件的第1265行左右,将mDockTop = mContentTop = mCurTop = mStatusBar.getFrameLw().bottom替换为mContentBottom = mCurBottom = mStatusBar.getFrameLw().top
  3. frameworks/policies/base/mid/com/android/internal/policy/impl/MidWindowManager.java文件的第719行左右,将mCurTop = mStatusBar.getFrameLw().bottom替换为mCurBottom = mStatusBar.getFrameLw().top

我在Froyo模拟器上测试过,效果良好。状态栏位于底部,其他所有内容都在其上方。正如我之前提到的,对于我的用例,我永远不需要展开状态栏,因此这对我来说已经足够了。但是,正如@jkhouw1所提到的,通过修改StatusBarService.java中的逻辑,特别是第1159行的performFling方法,可以使状态栏向上展开。

希望有人会发现这个有用!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接