【发布时间】:2022-02-20 08:42:23
【问题描述】:
4 位使用三星设备 A52 和 Tab10.1 的用户报告应用程序的播放区域未填满整个屏幕,如下所示
根据 GSMarena,此型号的屏幕宽度为 1080 像素, 所有视图都设置为 xml 中的 Match_Parent ,并且在应用程序运行时获取任何视图的宽度返回 810 像素而不是 1080 但是显示的视图填充进入屏幕
以下我用来获取屏幕宽度的方法也都返回 810 而不是 1080
方法一
DisplayMetrics displayMetrics = new DisplayMetrics();
activity.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
return displayMetrics.widthPixels;
方法二
WindowManager wm = (WindowManager) activity.getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
Point size = new Point();
display.getRealSize(size);
return size.x;
方法3
return activity.getResources().getDisplayMetrics().widthPixels;
如截图所示,位图是根据屏幕宽度 810 创建的,并没有填满整个屏幕
返回正确屏幕宽度的唯一方法是
WindowMetrics windowMetrics = activity.getWindowManager().getCurrentWindowMetrics();
Insets insets = windowMetrics.getWindowInsets().getInsetsIgnoringVisibility(WindowInsets.Type.systemBars());
return windowMetrics.getBounds().width() - insets.left - insets.right;
但是用这种方法更新游戏后,其他用户反映现在绘制的位图比屏幕更大,这意味着这种方法返回了他们实际屏幕宽度的125%,他们的设备是三星M62和三星Note10精简版
我的问题是:用户在可访问性或其他方面可能会混淆它们的任何屏幕比例因子,我们在获取屏幕宽度时必须考虑吗?或者是什么导致了这个问题
请注意,我在另一台 A52 设备上尝试了该游戏,并且游戏运行正常
【问题讨论】: