我正在为Android设备开发应用程序,并希望以 FHD +分辨率支持 samsung galaxy s8 + 。但是,当我在height
中记录模拟器的logcat
时,我得到2124x1080(对于FHD +)而不是* 2220 * x1080。那是由于导航栏和状态栏吗?如果是这种情况,我怎样才能确保我在height
中获得正确的logcat
?
我用于width
和height
的代码很简单:
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
int height = dm.heightPixels;
int width = dm.widthPixels;
答案 0 :(得分:1)
首先,我对于从(2200和1080)
获取这些值的位置感到有些困惑根据Google的设备指标(https://material.io/devices/),三星Galaxy S8 +的尺寸为1440 * 2960)
除此之外,您上面提供的代码似乎返回屏幕高度,减去导航栏和状态栏。如果你想找到这两个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;
}
上面的代码返回以像素为单位的值,如果您想将它们转换为dp,请使用以下方法:
public int pxToDp(int px) {
DisplayMetrics displayMetrics = getApplicationContext().getResources().getDisplayMetrics();
return Math.round(px / (displayMetrics.xdpi / DisplayMetrics.DENSITY_DEFAULT));
}