我正在为Android设备开发一个应用程序,并希望以FHD +分辨率支持三星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;
首先,我对你从哪里得到这些值(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));
}