Android中的getSize()是否包括状态栏的高度?
Does getSize() in Android include the height of the status bar?
有没有办法判断 getSize()
是否包括状态栏的高度?从对几部不同手机的测试来看,它似乎在某些手机上有效,但在其他手机上无效,并且在尝试使布局中的所有内容正确排列时令人沮丧。
在这个问题上花了一周时间并检查了 Google 的文档和 Whosebug 上的许多其他帖子(关于通过 getSize()
、getRealSize()
获取以像素为单位的屏幕尺寸) getMetrics(DisplayMetrics metrics)
, getRealMetrics(DisplayMetrics metrics)
, 等等……我还是一头雾水。
This picture is giving a better picture of the problem.
在某些手机上,根据上图,'Y/2' 行应该恰好位于 size.y / 2
(导航栏和状态栏之间的屏幕的一半),但实际上是 不是在中间:因此我图片上的'Not X'距离等于'X - getStatusBarSize()'。
我必须补充一点,我在 XML 中使用了一个 innerRadiusRatio 2.1 的环形对象。
但我不认为这是原因,因为一旦我使用下面的代码,它就可以在 getSize() 似乎包含状态栏高度的手机上运行:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Screen dimensions
display = getWindowManager().getDefaultDisplay();
size = new Point();
display.getSize(size);
//Get the screen dimensions
maxWidth = size.x
maxHeight = size.y - getStatusBarSize();
}
private int getStatusBarSize() {
Resources resources = getResources();
int resourceId = resources.getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0) {
return resources.getDimensionPixelSize(resourceId);
}
return 0;
}
虽然它可以在其他手机上与 maxheight = size.y
一起使用(不包括状态栏高度)。
在此先感谢大家的帮助!
我或多或少遇到过同样的问题,这可能会有所帮助:
// Get the size between the status & the navigation bars
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
// Real size of the screen (full screen)
Point realSize = new Point();
Display realDisplay = getWindowManager().getDefaultDisplay();
realDisplay.getRealSize(realSize);
//Get the screen dimensions
maxWidth = size.x;
maxHeight = size.y;
if (realSize.y - getNavBarSize() == size.y || realSize.y == size.y) {
Log.d(TAG, "onCreate: getSize() includes the status bar size");
maxHeight = size.y - getStatusBarSize();
}
我也遇到过同样的问题,我是这样解决的。
- Display.getSize() 仅有时包含状态栏高度。
- 对于 .getRealSize() 的解决方案,您还需要导航栏高度。
使用以下解决方案,您不需要导航栏高度:
View contentView = requireActivity().getWindow().findViewById(Window.ID_ANDROID_CONTENT);
int height = contentView.getHeight() - statusBarHeight - actionBarHeight;
(如果 returns 0,您可能必须在 contentView.post() 中获取高度。)
有没有办法判断 getSize()
是否包括状态栏的高度?从对几部不同手机的测试来看,它似乎在某些手机上有效,但在其他手机上无效,并且在尝试使布局中的所有内容正确排列时令人沮丧。
在这个问题上花了一周时间并检查了 Google 的文档和 Whosebug 上的许多其他帖子(关于通过 getSize()
、getRealSize()
获取以像素为单位的屏幕尺寸) getMetrics(DisplayMetrics metrics)
, getRealMetrics(DisplayMetrics metrics)
, 等等……我还是一头雾水。
This picture is giving a better picture of the problem.
在某些手机上,根据上图,'Y/2' 行应该恰好位于 size.y / 2
(导航栏和状态栏之间的屏幕的一半),但实际上是 不是在中间:因此我图片上的'Not X'距离等于'X - getStatusBarSize()'。
我必须补充一点,我在 XML 中使用了一个 innerRadiusRatio 2.1 的环形对象。 但我不认为这是原因,因为一旦我使用下面的代码,它就可以在 getSize() 似乎包含状态栏高度的手机上运行:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Screen dimensions
display = getWindowManager().getDefaultDisplay();
size = new Point();
display.getSize(size);
//Get the screen dimensions
maxWidth = size.x
maxHeight = size.y - getStatusBarSize();
}
private int getStatusBarSize() {
Resources resources = getResources();
int resourceId = resources.getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0) {
return resources.getDimensionPixelSize(resourceId);
}
return 0;
}
虽然它可以在其他手机上与 maxheight = size.y
一起使用(不包括状态栏高度)。
在此先感谢大家的帮助!
我或多或少遇到过同样的问题,这可能会有所帮助:
// Get the size between the status & the navigation bars
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
// Real size of the screen (full screen)
Point realSize = new Point();
Display realDisplay = getWindowManager().getDefaultDisplay();
realDisplay.getRealSize(realSize);
//Get the screen dimensions
maxWidth = size.x;
maxHeight = size.y;
if (realSize.y - getNavBarSize() == size.y || realSize.y == size.y) {
Log.d(TAG, "onCreate: getSize() includes the status bar size");
maxHeight = size.y - getStatusBarSize();
}
我也遇到过同样的问题,我是这样解决的。
- Display.getSize() 仅有时包含状态栏高度。
- 对于 .getRealSize() 的解决方案,您还需要导航栏高度。
使用以下解决方案,您不需要导航栏高度:
View contentView = requireActivity().getWindow().findViewById(Window.ID_ANDROID_CONTENT);
int height = contentView.getHeight() - statusBarHeight - actionBarHeight;
(如果 returns 0,您可能必须在 contentView.post() 中获取高度。)