onGlobalLayout中返回了错误的视图大小

时间:2013-02-07 15:09:40

标签: android view statusbar

我有一个应用程序,用户可以在其中拍照或从图库中选择图片。在下一页上,我使用onGlobalLayout来确定View的大小。当用户从图库中选择图片时,View会在onGlobalLayout中正确返回Status Bar尺寸。但是,当用户拍照时,顶部的Status Bar将变为不可见。当下一个活动出现时,onGlobalLayout会从顶部滑入,这会更改屏幕尺寸,但public class MyView extends View implements OnGlobalLayoutListener { @Override public void onGlobalLayout() { Log.d("MyView", "Width: " + getWidth()); Log.d("MyView", "Height: " + getHeight()); } } 不会考虑到这一点,因此会返回错误的视图大小。

这似乎是Android的一个错误,我正在考虑提交错误报告。但是,有没有人为此做过任何变通办法?

示例:

{{1}}

以上代码将返回两种不同的宽度和高度,具体取决于我返回的屏幕是否有状态栏。

由于

1 个答案:

答案 0 :(得分:0)

您可以在视图中覆盖fitSystemWindows以获取StatusBar的尺寸并相应地计算视图尺寸,有关示例,请参阅my answer here

另一个解决方案,但不那么通用和更麻烦,是根据预定义的status bar heights列表调整大小,因为android根据设备屏幕密度具有固定大小的状态栏。

我不认为它是android中的错误。