我有以下代码:
protected void onCreate(Bundle savedInstanceState) {
//...
requestWindowFeature(Window.FEATURE_NO_TITLE);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
screenW = getResources().getDisplayMetrics().widthPixels;
screenH = getResources().getDisplayMetrics().heightPixels;
//...
}
getDisplayMetrics()给出1024x600屏幕W = 1024和screenH = 552 这正是我需要的,它只给出了不包括状态栏的屏幕。 但对于某些屏幕,它给出了屏幕的宽度和高度,包括状态栏。(如screenW = 1024和screenH = 600)我已经尝试过GenyMotion中的屏幕,getDisplayMetrics()返回一些屏幕的宽度和高度包括状态栏和除状态栏之外的其他屏幕。 对于具有1080x1920屏幕的三星Galaxy S4,它返回screenW = 1920和screenH = 1080。 (这里我意识到显示器已旋转)对于1024x768屏幕的平板电脑,它返回screenW = 1024和screenH = 720。
有很多功能,比如
getWindowManager().getDefaultDisplay().getMetrics(metrics);
getWindowManager().getDefaultDisplay().getRectSize(rectTemp);
getWindowManager().getDefaultDisplay().getSize(p);
但是所有这些屏幕都为屏幕尺寸提供了屏幕尺寸,包括状态栏和其他不包括状态栏的屏幕尺寸。 但是我发现了
getWindowsManager().getDefaultDisplay().getRealmetrics(metrics)
总是给出包括状态栏的大小。
那么,除了状态栏之外,你有什么建议获得屏幕的宽度和高度?
答案 0 :(得分:1)
如果您总是获得包括状态栏在内的屏幕高度,并且您希望它没有状态栏高度,则可以简单地计算状态栏高度并从中减去。要获取状态栏高度,可以使用以下代码。
public int getStatusBarHeight() {
int statusBarHeight = 0;
int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0) {
statusBarHeight = getResources().getDimensionPixelSize(resourceId);
}
return statusBarHeight;
}