在 s8+ 上查找实际可用的屏幕高度
Finding the actual available screen height on an s8+
我正在为 android 设备开发应用程序并希望支持具有 FHD+ 的 samsung galaxy s8+解析度。但是,当我在 logcat
中记录模拟器的 height
时,我得到 2124x1080(对于 FHD+)而不是 *2220*x1080。那是由于导航栏和状态栏吗?如果是这种情况,我如何确保我在 logcat
中获得正确的 height
?
我用于 width
和 height
的代码很简单:
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));
}
我正在为 android 设备开发应用程序并希望支持具有 FHD+ 的 samsung galaxy s8+解析度。但是,当我在 logcat
中记录模拟器的 height
时,我得到 2124x1080(对于 FHD+)而不是 *2220*x1080。那是由于导航栏和状态栏吗?如果是这种情况,我如何确保我在 logcat
中获得正确的 height
?
我用于 width
和 height
的代码很简单:
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));
}