某些三星设备上的屏幕宽度错误

Wrong screen width on certain Samsung devices

4 名使用三星设备 A52 和 Tab10.1 的用户报告应用程序的播放区域没有填满整个屏幕,如下所示

根据 GSMarena,此型号屏幕宽度为 1080 像素, 在 xml 中所有视图都设置为 Match_Parent ,并且在应用程序 运行 returns 810 像素而不是 1080 时获取任何视图的宽度但是显示的视图填充进入屏幕

下面我用来获取屏幕宽度的方法也都是 return 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;

方法三

return activity.getResources().getDisplayMetrics().widthPixels;

并且如屏幕截图所示,根据屏幕宽度 810 创建的位图并没有填满整个屏幕

return正确屏幕宽度的唯一方法是

WindowMetrics windowMetrics = activity.getWindowManager().getCurrentWindowMetrics();
Insets insets = windowMetrics.getWindowInsets().getInsetsIgnoringVisibility(WindowInsets.Type.systemBars());
return windowMetrics.getBounds().width() - insets.left - insets.right;

但是在使用此方法更新游戏后,其他用户报告说位图现在绘制在比屏幕更大的区域,这意味着此方法 return 125% 的实际屏幕宽度,他们的设备是三星 M62 & 三星 Note10 Lite

我的问题是:他们是否有任何屏幕比例因素,用户可以在可访问性或其他方面搞砸,我们在获得屏幕宽度时必须考虑?或者是什么导致了这个问题

请注意,我在另一台 A52 设备上试过游戏并且游戏运行正常

经过 6 个月的搜索并试图找到为什么位图在某些模型中显示有时比 ImageView 大有时小,但两者都是以编程方式创建并使用相同的 width/height 像素 我终于找到了一个解决上述所有异常的解决方案

bitmap.setDensity(Bitmap.DENSITY_NONE);