WnavigationBarView 设置了图片后, indowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS 无效 AOSP 如何修改
时间: 2024-03-19 10:45:11 浏览: 128
要解决在 `navigationBarView` 中设置图片后,在 AOSP 中 `WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS` 失效问题,可以按照以下步骤进行:
1. 打开 `frameworks/base/core/res/res/values/styles.xml` 文件,找到 `Theme.Material.Light` 主题的定义,复制一份命名为 `Theme.Material.Light.NoTranslucent`。
2. 在新的主题中移除 `android:windowTranslucentStatus` 属性,保留其他属性。
3. 打开 `frameworks/base/core/res/res/values/themes.xml` 文件,找到 `Theme.Material.Light.DarkActionBar` 主题的定义,复制一份命名为 `Theme.Material.Light.DarkActionBar.NoTranslucent`。
4. 在新的主题中移除 `android:windowTranslucentStatus` 属性,保留其他属性。
5. 打开 `frameworks/base/core/java/android/view/WindowManagerGlobal.java` 文件,找到 `applyCompatConfiguration` 方法。
6. 在方法中找到 `params.flags |= WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;` 这行代码,将其修改为 `params.flags &= ~WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;`。
7. 打开 `frameworks/base/core/res/res/layout/navigation_bar.xml` 文件,将 `ImageView` 的 `layout_height` 属性设置为一个固定值,比如 `48dp`。
```
<ImageView
android:id="@+id/navigation_bar_icon"
android:layout_width="match_parent"
android:layout_height="48dp"
android:layout_gravity="center"
android:src="@drawable/navigation_bar_icon" />
```
8. 如果 `navigationBarView` 的高度也需要设置为固定值,打开 `frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java` 文件,找到 `updateResources` 方法,将其中的 `LayoutParams.MATCH_PARENT` 改为一个固定值。
```
mBar.setLayoutParams(new FrameLayout.LayoutParams(
FrameLayout.LayoutParams.MATCH_PARENT, 48/*固定值*/, Gravity.BOTTOM));
```
9. 重新编译 AOSP 并刷入设备即可。
注意:以上修改可能会影响到其他应用的行为,需谨慎操作。同时,需要确保设置的图片大小和导航栏大小相同。
阅读全文