关机对话框字体大小不跟随显示设置变化的修改

现象描述:设置\显示\显示大小\最大,按电源键的关机,弹出确认框

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();
        }

    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值