在 s8+ 上查找实际可用的屏幕高度

Finding the actual available screen height on an s8+

我正在为 android 设备开发应用程序并希望支持具有 FHD+ 的 samsung galaxy s8+解析度。但是,当我在 logcat 中记录模拟器的 height 时,我得到 2124x1080(对于 FHD+)而不是 *2220*x1080。那是由于导航栏和状态栏吗?如果是这种情况,我如何确保我在 logcat 中获得正确的 height

我用于 widthheight 的代码很简单:

    DisplayMetrics dm = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(dm);
    int height = dm.heightPixels;
    int width = dm.widthPixels;

首先,我有点困惑你从哪里得到这些值(2200 和 1080)

根据 Google 的设备指标 (https://material.io/devices/) Samsung Galaxy S8+ 的尺寸为 1440*2960)

除此之外,您提供的代码显示在 returns 屏幕高度上方,减去导航栏和状态栏。如果你想找到这两个UIElements的高度,按照下面的代码。

导航栏

public int getNavBarHeight() { 
      int result = 0;
      int resourceId = getResources().getIdentifier("navigation_bar_height", "dimen", "android");
      if (resourceId > 0) {
          result = getResources().getDimensionPixelSize(resourceId);
      } 
      return result;
}

状态栏

public int getStatusBarHeight() { 
      int result = 0;
      int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
      if (resourceId > 0) {
          result = getResources().getDimensionPixelSize(resourceId);
      } 
      return result;
}

上面的代码returns以像素为单位的值,如果你想将它们转换为dp,使用这个方法:

public int pxToDp(int px) {
    DisplayMetrics displayMetrics = getApplicationContext().getResources().getDisplayMetrics();
    return Math.round(px / (displayMetrics.xdpi / DisplayMetrics.DENSITY_DEFAULT));
}