获得实际的视图高度

时间:2010-12-21 16:59:04

标签: android size android-layout

简单的问题,也许是令人沮丧的复杂但希望简单的答案?

获取其大小设置为FILL_PARENT的元素的实际高度的“最佳实践”是什么?

2 个答案:

答案 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中设置宽度和高度值,因为它们都已执行了布局。这显然比为每个需要公开其实际尺寸的视图创建许多侦听器更好(当然,除非您必须具有视图生成事件的范围,这通常不是必需的。)