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

问题描述 投票:2回答:1

我正在为Android设备开发一个应用程序,并希望以FHD +分辨率支持三星galaxy s8 +。但是,当我在height中记录模拟器的logcat时,我得到2124x1080(对于FHD +)而不是* 2220 * x1080。那是由于导航栏和状态栏吗?如果是这样的话我怎么能确保我在height得到正确的logcat

我用于widthheight的代码很简单:

    DisplayMetrics dm = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(dm);
    int height = dm.heightPixels;
    int width = dm.widthPixels;
java android android-studio android-logcat samsung-galaxy
1个回答
1
投票

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

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

除此之外,您在上面提供的代码似乎返回屏幕高度,减去导航栏和状态栏。如果要查找这两个UIElements的高度,请按照下面的代码。

的NavBar

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;
}

上面的代码以像素为单位返回值,如果您想将它们转换为dp,请使用以下方法:

public int pxToDp(int px) {
    DisplayMetrics displayMetrics = getApplicationContext().getResources().getDisplayMetrics();
    return Math.round(px / (displayMetrics.xdpi / DisplayMetrics.DENSITY_DEFAULT));
}
© www.soinside.com 2019 - 2024. All rights reserved.