现象描述:设置\显示\显示大小\最大,按电源键的关机,弹出确认框
android 12中原生去掉了关机确认对话框的的显示,但是客户头铁非要显示,询问MTK回答客制代码只能自己解决,只能自己搞定,贴了代码,仅供参考
在ShutdownThread中修改:frameworks/base / services/core/java/com/android/server/power/ShutdownThread.java
shutdownInner方法:
先获取压缩比,再通过反射获取对话框的控件,最后设置字体大小,切记最后一步一定要做,默
mMessageView.setTextSize(TypedValue.COMPLEX_UNIT_PX,new_size_msg);这句要默认转为COMPLEX_UNIT_PX,不然修改无效
private static float getFontScale(Context context){
ContentResolver resolver = context.getContentResolver();
float font_scale = Settings.System.getFloat(resolver, Settings.System.FONT_SCALE, 1.0f);
String force_density = Settings.Secure.getString(context.getContentResolver(),
Settings.Secure.DISPLAY_DENSITY_FORCED);
if(TextUtils.isEmpty(force_density)){
force_density = "240";
}
float scale_default = 1.0f;
try {
scale_default = Float.parseFloat(force_density)/240;
} catch (Exception e) {
e.printStackTrace();
}
android.util.Log.d(TAG, "scale_default:" + scale_default);
return scale_default;
}
private static void setDialogFontSize(AlertDialog dialog, float scale){
Button btn_pos = dialog.getButton(AlertDialog.BUTTON_POSITIVE);
Button btn_neg = dialog.getButton(DialogInterface.BUTTON_NEGATIVE);
float btn_font_size = btn_pos.getTextSize();
float new_size = btn_font_size * scale;
btn_pos.setTextSize(TypedValue.COMPLEX_UNIT_PX,new_size);
btn_neg.setTextSize(TypedValue.COMPLEX_UNIT_PX,new_size);
try {
Field mAlert = AlertDialog.class.getDeclaredField("mAlert");
mAlert.setAccessible(true);
Object mAlertController = mAlert.get(dialog);
Field mTitle = mAlertController.getClass().getDeclaredField("mTitleView");
mTitle.setAccessible(true);
TextView mTitleView = (TextView) mTitle.get(mAlertController);
float title_font_size = mTitleView.getTextSize();
float new_size_title = title_font_size * scale;
mTitleView.setTextSize(TypedValue.COMPLEX_UNIT_PX,new_size_title);
Field mMessage = mAlertController.getClass().getDeclaredField("mMessageView");
mMessage.setAccessible(true);
TextView mMessageView = (TextView) mMessage.get(mAlertController);
float msg_font_size = mMessageView.getTextSize();
float new_size_msg = msg_font_size * scale;
mMessageView.setTextSize(TypedValue.COMPLEX_UNIT_PX,new_size_msg);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
}