在首次显示之前获取视图宽度/高度或字体宽度/高度/其他尺寸

时间:2011-03-21 09:12:52

标签: android view measurement

我知道对放置进行视图大小计算是不受欢迎的。 Android布局管理器应正确放置所有视图。 但是在进行某种计算时会出现一些合理的情况 应该这样做以提供提示(例如GridView中的列数) 或调整文本视图的大小以允许在一行中显示最少数量的字符。 对于这些情况,我想获得相关的视图宽度/高度信息或 字体宽度/高度等。 但是,getWidth()/ getHeigth()/ etc调用永远不会返回有效值 除非视图已在展示中呈现,但后来却很晚。 这是一个陷阱22的情况。 我想知道是否有一些我没有找到的方法(android api很大 理解我心中的一切,使我上面描述的内容成为可能。

2 个答案:

答案 0 :(得分:7)

在计算其父级之前无法计算视图的大小,但您始终可以通过调用measure(allowedWidth, allowedHeight)来强制执行此计算。然后getMeasuredWidth()将有效。

请参阅http://developer.android.com/reference/android/view/View.html#measure(int, int)

答案 1 :(得分:5)

是的,我测试了这个建议并且有效!

示例代码。

Display display = getWindowManager().getDefaultDisplay();
View s = findViewById(R.id.Screen); // Screen is a container layout
s.measure(display.getWidth(), display.getHeight());
View c = findViewById(R.id.Cell0);
Log.i(TAG, "cell width = " + String.valueOf(c.getMeasuredWidth())
  +  " height = " + String.valueOf(c.getMeasuredHeight()));

我不明白的是我错过了这个! :) 我对测量过程了如指掌,但我一直坚持使用它 在自定义视图中......