上文Android 11 系统修改无源码第三方应用的显示内容
说到的第三方应用适配中,通过修改Configuration对象的属性,实现修改第三方应用DPI
这篇文章进一步分析下Configuration类中的其他属性。
创建Configuration对象
Configuraion对象的实例化最终会走到setToDefaults()方法
frameworks/base/core/java/android/content/res/Configuration.java
public Configuration() {
unset();
}
/**
* Set this object to completely undefined.
* @hide
*/
public void unset() {
setToDefaults();
fontScale = 0;
}
/**
* Set this object to the system defaults.
*/
public void setToDefaults() {
fontScale = 1;
mcc = mnc = 0;
mLocaleList = LocaleList.getEmptyLocaleList();
locale = null;
userSetLocale = false;
touchscreen = TOUCHSCREEN_UNDEFINED;
keyboard = KEYBOARD_UNDEFINED;
keyboardHidden = KEYBOARDHIDDEN_UNDEFINED;
hardKeyboardHidden = HARDKEYBOARDHIDDEN_UNDEFINED;
navigation = NAVIGATION_UNDEFINED;
navigationHidden = NAVIGATIONHIDDEN_UNDEFINED;
orientation = ORIENTATION_UNDEFINED;
screenLayout = SCREENLAYOUT_UNDEFINED;
colorMode = COLOR_MODE_UNDEFINED;
uiMode = UI_MODE_TYPE_UNDEFINED;
screenWidthDp = compatScreenWidthDp = SCREEN_WIDTH_DP_UNDEFINED;
screenHeightDp = compatScreenHeightDp = SCREEN_HEIGHT_DP_UNDEFINED;
smallestScreenWidthDp = compatSmallestScreenWidthDp = SMALLEST_SCREEN_WIDTH_DP_UNDEFINED;
densityDpi = DENSITY_DPI_UNDEFINED;
assetsSeq = ASSETS_SEQ_UNDEFINED;
seq = 0;
windowConfiguration.setToDefaults();
}
Configuration类中的属性说明
根据setToDefaults方法,分析方法中重置的属性
以下是一些主要的属性以及它们的用途:
locale | 表示用户设置的区域设置(例如,en_US 表示美国英语) |
screenLayout | 描述了屏幕的尺寸和方向,例如是否是长宽比较大的屏幕,或者是横屏还是竖屏 |
fontScale | 用户设置的字体缩放比例,可以用于调整应用中文字的大小 |
orientation | 设备的当前方向,比如横向或纵向 |
densityDpi | 屏幕的像素密度,单位为 DPI(dots per inch) |
keyboard | 描述键盘的类型 |
keyboardHidden | 描述键盘的可见性 |
mcc 和 mnc | 移动国家码(MCC)和移动网络码(MNC),这些与用户的移动运营商相关 |
uiMode | 表示用户界面模式,例如夜间模式 |
touchscreen | 触摸屏类型 |
navigation | 导航栏类型 |
navigationHidden | 导航栏是否隐藏 |