移动Android状态栏

ian*_*nlh 3 java android

我正在尝试将Android(Froyo)中的状态栏从屏幕顶部移动到屏幕底部.我做了很多研究,但没有找到任何能够成功做到这一点的人.

旁注:我不想隐藏状态栏,我想移动它.另外,我不担心状态栏是否无法再展开.对于这个用例,它永远不需要.

这是我到目前为止所做的:

  1. 查看status_bar.xml文件,systemui/res/status_bar.xml但它似乎只在状态栏中定义布局而不是状态栏本身.
  2. 看着systemui\src\com\android\systemui\statusbar\StatusBarService.java档案.
    • 在第267行附近,a StatusBarView是从R.layout.status_bar创建的(在我上面提到的status_bar.xml文件中定义).
    • 在线330周围,WindowManager.LayoutParams实例化a并且将重力设置为Gravity.TOP.
    • 视图和WindowManager.LayoutParams将传递到 WindowManagerImpl.getDefault().addView(view, lp)addStatusBarView()末尾的第341行.

基于此,我将WindowManager.LayoutParams的重力更改为Gravity.BOTTOM.这个DID在某种程度上起作用; 状态栏位于屏幕底部.但是,通常显示在状态栏下方的所有其他内容仍位于状态栏下方 - 它会被推离屏幕底部.就像屏幕的其余部分相对于状态栏一样.

任何人都可以提供任何有关我需要修改的内容的见解吗?

ian*_*nlh 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.java替换mDockTop = mContentTop = mCurTop = mStatusBar.getFrameLw().bottommContentBottom = mCurBottom = mStatusBar.getFrameLw().top.
  3. 绕线719 frameworks/policies/base/mid/com/android/internal/policy/impl/MidWindowManager.java,替换mCurTop = mStatusBar.getFrameLw().bottommCurBottom = mStatusBar.getFrameLw().top.

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

希望有人觉得这很有用!