Android开发中,想要自己设置系统默认的屏幕缩放比列
在原生的setting中,Accessibility > DisPlay Size,可以设置屏幕缩放
个人思路是改变进度条的值,先跟着这个流程走一遍
1、首先找到这个界面对应的代码文件
packages\apps\Settings\src\com\android\settings\PreviewSeekBarPreferenceFragment.java
找到进度条拖动时的对应代码:
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
setPreviewLayer(progress, true);
if (!mSeekByTouch) {
commit();
}
}
commit()方法是在PreviewSeekBarPreferenceFragment.java的子类中ScreenZoomSettings.java实现的,对应目录:
packages\apps\Settings\src\com\android\settings\display\ScreenZoomSettings.java
/**
* Persists the selected density and sends a configuration change.
*/
@Override
protected void commit() {
final int densityDpi = mValues[mCurrentIndex];
if (densityDpi == mDefaultDensity) {
DisplayDensityUtils.clearForcedDisplayDensity(Display.DEFAULT_DISPLAY);
} else {
//关注这个地方
DisplayDensityUtils.setForcedDisplayDensity(Display.DEFAULT_DISPLAY, densityDpi);
}
}
2、 找到关键代码后,使用adb调试一下我们想要的density值
我这里是拖到了Large,然后使用命令adb shell wm density获取:
C:\Users\123>adb shell wm density
Physical density: 160
Override density: 186
3、然后在SystemUI中设置我们想要的默认比例;frameworks/base/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java文件中onCreate()方法最后加上
if(SystemProperties.getBoolean("persist.sys.123firstboot", true)){//这个属性值可以自己随意定义
DisplayDensityUtils.setForcedDisplayDensity(Display.DEFAULT_DISPLAY, 186);
SystemProperties.set("persist.sys.123firstboot", "false");//这里设置为false之后就不会再进入这个判断了
}
结束。