Android 中的 getSize() 是否包含状态栏的高度?



有没有办法判断getSize()是否包含状态栏的高度? 从在几部不同的手机上进行测试来看,它似乎在某些手机上确实如此,但在其他手机上却没有,并且在尝试使布局中的所有内容正确排列时令人沮丧。

在花了一周时间解决这个问题并检查了Google的文档和Stackoverflow上的许多其他帖子(关于通过getSize()getRealSize()getMetrics(DisplayMetrics metrics)getRealMetrics(DisplayMetrics metrics)等获取屏幕尺寸(以像素为单位(之后......我仍然对此一无所知。

这张图片可以更好地说明问题。

在某些手机上,根据上图,"Y/2"行应该正好在size.y / 2(导航和状态栏之间屏幕的正好一半(,但实际上不在中间:因此,我图片上的"非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;

(如果它返回 0,则可能需要在 contentView.post(( 中获取高度。

相关内容

  • 没有找到相关文章

最新更新