文章目录
横竖屏切换
基于AOSP 14代码
横竖屏切换时,伴随着的不仅仅是页面显示方向的改变,导航栏作为SystemUI的一部分,在横竖屏切换时也会改变位置显示位置,通常情况下都会在屏幕底部显示虚拟导航栏,通过在Framework中进行配置,可以使导航栏在横竖屏切换时始终不改变显示位置,使在横屏时显示在屏幕左边
/frameworks/base/services/core/java/com/android/server/wm/DisplayPolicy.jav
public void onConfigurationChanged() {
...
updateConfigurationAndScreenSizeDependentBehaviors();
...
}
void updateConfigurationAndScreenSizeDependentBehaviors() {
final Resources res = getCurrentUserResources();
mNavigationBarCanMove =
mDisplayContent.mBaseDisplayWidth != mDisplayContent.mBaseDisplayHeight
&& res.getBoolean(R.bool.config_navBarCanMove);
mDisplayContent.getDisplayRotation().updateUserDependentConfiguration(res);
}
系统配置发生变化时,比如横竖屏切换过程中,会回调到onConfigurationChanged()函数,在此函数中调用updateConfigurationAndScreenSizeDependentBehaviors()函数
updateConfigurationAndScreenSizeDependentBehaviors()函数中通过Resource读取系统配置文件中的config_navBarCanMove值来确定在横竖屏切换过程是否需要导航栏始终显示在屏幕底部
/frameworks/base/core/res/res/values/config.xml
<bool name="config_navBarCanMove">true</bool>
默认情况下config_navBarCanMove配置的默认值是true,导航栏位置始终在屏幕底部显示,有需要在横竖屏切换过程中导航栏始终显示在屏幕左边时,将true改为false即可
修改后需要查看修改结果,可编译framework-res, 通过make framework-res 生成framework-res.apk
将设备root后,push framework-res.apk到设备的/system/framework/ 目录,重启设备即可