- 问题场景
在设备在低分辨率时,关机提示的弹窗会超出屏幕,并且在调节不同分辨率,弹窗相对整个屏幕的大小比例也在变化
- 问题原因
因为弹窗没有设定一个相对值(类似dp)这种单位的宽度
- 问题修复
涉及的类:
frameworks/base/services/core/java/com/android/server/power/ShutdownThread.java
解决的方案:
解决方案其实也很简单,给弹窗固定一个屏幕宽度比例的长度就可以,这样可以无论在哪个分辨率下面都是屏幕宽度一样的比例宽度
代码里的注释1 部分即为解决问题的代码
注意点:这里没有activity的长下文,所以获取屏幕宽度的方法不能使用getWindow那一套
private static void shutdownInner(final Context context, boolean confirm) {
......
if (confirm) {
......
closer.dialog = sConfirmDialog;
sConfirmDialog.setOnDismissListener(closer);
sConfirmDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);
sConfirmDialog.show();
// 注释 1_start: 以下就是解决方案
android.util.DisplayMetrics dm = context.getResources().getDisplayMetrics();
android.view.WindowManager.LayoutParams params = sConfirmDialog.getWindow().getAttributes();
params.width = (int) (dm.widthPixels * 0.8);// set dilog width is 80% of disply screen width
sConfirmDialog.getWindow().setAttributes(params);
// 注释 1_end:
......
}
......
}