gpt4 book ai didi

java - 移动 Android 状态栏

转载 作者:太空宇宙 更新时间:2023-11-03 13:05:14 26 4
gpt4 key购买 nike

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

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

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

  1. 查看了 systemui/res/status_bar.xml 中的 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.TOP
    • View 和 WindowManager.LayoutParams 被传递给 WindowManagerImpl.getDefault().addView(view, lp),位于 addStatusBarView() 末尾的第 341 行。

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

任何人都可以提供任何关于我还需要修改什么才能使其正常工作的见解吗?

最佳答案

这个问题的解决方法如下:

  1. frameworks/base/services/java/com/android/server/status/StatusBarService.java 的第 345 行附近,将 Gravity.TOP 更改为 Gravity。底部
  2. frameworks/policies/base/phone/com/android/internal/policy/impl/PhoneWindowManager.java 的第 1265 行附近替换 mDockTop = mContentTop = mCurTop = mStatusBar.getFrameLw() .bottommContentBottom = mCurBottom = mStatusBar.getFrameLw().top
  3. 围绕 frameworks/policies/base/mid/com/android/internal/policy/impl/MidWindowManager.java 的第 719 行,替换 mCurTop = mStatusBar.getFrameLw().bottommCurBottom = mStatusBar.getFrameLw().top

我在模拟器中的 Froyo 上对此进行了测试,它工作正常。状态栏在底部,其他一切都在它上面。正如我上面提到的,对于我的用例,我永远不需要扩展状态栏,所以这对我来说已经足够了。但是,正如 @jkhouw1 提到的,可以通过修改 StatusBarService.java 中的逻辑,特别是第 1159 行的 performFling 方法,使状态栏向上扩展。

希望有人觉得这有用!

关于java - 移动 Android 状态栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5971585/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com