2

在我的应用程序中,我在线性布局中有 gridview。由于屏幕尺寸不同,我想计算 gridview 容器的宽度(在线性布局中),然后我会决定屏幕上应该显示多少列。我的问题是。当我写

linearlayout.getwidth();

它返回 0,因为它在 oncreate 方法中获取视图大小还为时过早。

什么是获得视图高度或宽度的干净解决方案。

我试过

Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
int gridSize = display.getWidth();

但是android说它已被弃用:(

4

1 回答 1

1

Display.getWidth()并且Display.getHeight()从 API 13 开始都已弃用,而支持Display.getSize(Point). 为了与两者兼容,您必须进行版本检查并选择合适的版本。

这就是我这样做的方式:

Point size = new Point();
Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
if (Build.VERSION.SDK_INT >= 13) {
    display.getSize(size); // API 13+
} else {
    size.x = display.getWidth();
    size.y = display.getHeight();
}

然后size.x是你的宽度。(不要忘记在您的方法签名前加上@TargetApi(13) @SuppressWarnings("deprecation").)

请记住,这是单位的显示宽度;如果您想简单地获取一个视图的大小,则必须在布局 UI 后调用它。这与此答案略有无关,但您可以在此线程的答案中找到解决方案。

于 2013-01-22T21:49:32.627 回答