display.getSize(size)使用Galaxy S10返回错误的屏幕尺寸

时间:2019-03-25 08:24:53

标签: java android screen

我使用以下代码获取设备的屏幕尺寸。此功能适用于除Galaxy S10之外的所有设备。 Galaxy S10具有3040垂直像素,此功能返回2800左右的东西吗?

    Display display = getWindowManager().getDefaultDisplay();
    Point size = new Point();
    display.getSize(size);

2 个答案:

答案 0 :(得分:1)

getSize()返回的大小不一定返回实际大小。请查看文档,以找出我在here下引用的原因。

  
      
  1. 返回的大小可以调整为排除始终可见的某些系统装饰元素。

  2.   
  3. 它可以扩展以提供与最初为较小的显示器设计的较旧应用程序的兼容性。

  4.   
  5. 取决于显示所属的WindowManager,它可以有所不同。

  6.   

答案 1 :(得分:1)

您可以尝试使用:

public static int getDisplayHeight(Context context) {
    WindowManager windowManager =(WindowManager)context.getSystemService(Context.WINDOW_SERVICE);
    DisplayMetrics displayMetrics = new DisplayMetrics();
    windowManager.getDefaultDisplay().getRealMetrics(displayMetrics);
    return displayMetrics.heightPixels - getNavigationBarHeight(context);
}

public static int getNavigationBarHeight(Context context) {
    if (context != null && context.getResources() != null) {
      Resources resources = context.getResources();
      int resourceId = resources.getIdentifier("navigation_bar_height", "dimen", "android");
      return resourceId > 0 ? resources.getDimensionPixelSize(resourceId) : 0;
    }
    return 0;
}