项目场景:
Android 13 EDLA项目双桌面系统,原生Launcher3需要显示状态栏和导航栏,切换到自定义的Launcher时需要隐藏状态栏和导航栏,默认全屏模式。
问题描述
1.设置config参数默认不显示导航栏方式无法做到动态设置的需求。
设置状态栏高度为0dip
frameworks/base/core/res/res/values/dimens.xml
<resources>
<dimen name="status_bar_height">0dip</dimen>
</resources>
默认不显示导航栏
frameworks/base/core/res/res/values/config.xml
<resources>
<bool name-"Config_showlavigationBar">falsec/bool>
</resources>
2.应用中设置全屏模式方式,需要每个应用适配,修改范围过大。
由于1、2方式无法满足项目需求,需要修改SystemUI代码实现。
解决方案:
1. 动态隐藏导航
由于需求项目是双桌面系统,桌面切换通过应用禁用/启用对应的Launcher应用来实现Launcher唯一。禁用原生Launcher3时就可以同步隐藏底部的状态栏,启动原生Launcher3时额可以显示底部状态栏;所以禁用Launcher3即可实现动态控制导航栏显示或隐藏。
adb禁用/启动应用指令
adb shell pm disable-user <package_name> //禁用
adb shell pm enable <package_name> //启用
代码实现应用禁用/启用
PackageManager pm = mContext.getPackageManager();
pm.setApplicationEnabledSetting("com.android.launcher3", PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 0);//启用Launcher3
pm.setApplicationEnabledSetting("com.android.launcher3", PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER, 0);//禁用Launcher3
禁用/启用Launcher3时可以同步设置默认Launcher。
private void setDefaultLauncher(String packageName) {
PackageManager pm = getContext().getPackageManager();
ResolveInfo currentLauncher = getCurrentLauncher()