【问题标题】:linear layout (View) Size in androidandroid中的线性布局(视图)大小
【发布时间】:2013-01-23 05:49:32
【问题描述】:

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

linearlayout.getwidth();

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

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

我试过了

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

但是android说它已被弃用:(

【问题讨论】:

  • 想想你是否真的需要在onCreate()方法中拥有它。人们倾向于将所有代码都放入这个方法中,但有时这并不是一个好主意。阅读有关Activity 生命周期的更多信息:developer.android.com/reference/android/app/Activity.html
  • 在初始化视图之前我需要这些信息,因为我想决定在 gridview 中应该显示多少列。所以不是 oncreate 不是 onresume 可以帮助解决这个问题……如果我的问题解释得不好,请告诉我,我会详细解释它,但请帮助帮助。

标签: android view width android-linearlayout


【解决方案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 布局后调用它。这与此答案稍有无关,但您可以在 this thread's answer 中找到解决方案。

【讨论】:

  • 我遇到了这段代码的问题 if (Build.VERSION.SDK_INT
  • 你为什么使用VERSION_CODES.GINGERBREAD?我明确说过要使用 13(顺便说一下,它是 ICS,而不是 Gingerbread)。
  • 埃里克没有任何区别。我只是复制了您的代码,然后将 @TargetApi(13) @SuppressWarnings("deprecation") 放在 Oncreate 方法的开头和 Activity 的开头,但这个问题就在那里
  • 您在上面的评论中输入的代码是GINGERBREAD。您能否更新您的初始帖子并添加您当前使用的完整相关代码以及堆栈跟踪?
  • Eric 我找到了解决方案,它是独立的,可以与每个版本一起使用.......WindowManager wm = (WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE);显示显示 = wm.getDefaultDisplay(); layoutsize = display.getWidth();
猜你喜欢
  • 2014-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多