简单的问题,也许是令人沮丧的复杂但希望简单的答案?
获取其大小设置为FILL_PARENT的元素的实际高度的“最佳实践”是什么?
答案 0 :(得分:17)
绝对比看起来应该更复杂。与建议问题中的答案相比,我发现的一种更简单的方法是使用ViewTreeObserver。在onCreate()方法中,您可以使用以下代码:
TextView textView = (TextView)findViewById(R.id.my_textview);
ViewTreeObserver observer = textView.getViewTreeObserver();
observer.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
//in here, place the code that requires you to know the dimensions.
//this will be called as the layout is finished, prior to displaying.
}
}
答案 1 :(得分:2)
如果您需要对视图中的多个组件的维度执行任何操作,只需对上述答案进行额外修改。在布局完成时为每个视图调用布局侦听器。这是递归地直到根视图组件(即子元素生成布局事件,然后父元素生成其布局事件)。这意味着你可以简单地挂钩根视图组件的布局事件,以便在任何视图的布局发生变化时得到通知。
ViewTreeObserver observer = this.findViewById(android.R.id.content).getViewTreeObserver();
现在您可以预期所有视图都会在onGlobalLayout中设置宽度和高度值,因为它们都已执行了布局。这显然比为每个需要公开其实际尺寸的视图创建许多侦听器更好(当然,除非您必须具有视图生成事件的范围,这通常不是必需的。)