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

dsn*_*snz 4 android measurement view

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

pca*_*ans 7

在计算其父级之前,无法计算视图的大小,但您始终可以通过调用measure(allowedWidth, allowedHeight)它来强制进行此计算.然后getMeasuredWidth()会工作.

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


dsn*_*snz 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()));
Run Code Online (Sandbox Code Playgroud)

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