【问题标题】:Wrong screen width on certain Samsung devices某些三星设备的屏幕宽度错误
【发布时间】: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 设备上尝试了该游戏,并且游戏运行正常

【问题讨论】:

    标签: android width


    【解决方案1】:

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

    bitmap.setDensity(Bitmap.DENSITY_NONE);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-10
      • 1970-01-01
      • 2016-05-14
      • 2014-10-29
      • 1970-01-01
      相关资源
      最近更新 更多