片段内的视图坐标始终为空

Posted

技术标签:

【中文标题】片段内的视图坐标始终为空【英文标题】:View coordinates inside fragment are always null 【发布时间】:2014-02-13 13:54:09 【问题描述】:

我需要在我的布局中获取某些视图的坐标。我尝试过这样做(在 onCreateView 内)

TextView[] tv = new TextView[3]
tv[0] = (TextView) view.findViewById(R.id.content0);
tv[1] = (TextView) view.findViewById(R.id.content1);
tv[2] = (TextView) view.findViewById(R.id.content2);
RectF[] positions = new RectF[3];

for (int i = 0; i < tv.length; i++) 
    int top = tv[i].getTop();
    int left = tv[i].getLeft();
    int width = tv[i].getWidth();
    int height = tv[i].getHeight();
    positions[i] = new RectF(left, top, left + width, top + height);


但如果我尝试将位置数组打印到 Logcat 中,我总是得到 0,0,0,0。怎么了?

【问题讨论】:

您要查找的信息在运行时可用,但仅在绘制视图时可用。 【参考方案1】:

正如黑带所提到的,您必须等待视图的布局才能获得尺寸。 使用 ViewTreeObserver。

    getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() 
        @Override
        public void onGlobalLayout() 
            for (int i = 0; i < tv.length; i++) 
                int top = tv[i].getTop();
                int left = tv[i].getLeft();
                int width = tv[i].getWidth();
                int height = tv[i].getHeight();
                positions[i] = new RectF(left, top, left + width, top + height);

            
            getViewTreeObserver().removeOnGlobalLayoutListener(this);

        
    );

【讨论】:

以上是关于片段内的视图坐标始终为空的主要内容,如果未能解决你的问题,请参考以下文章

方向更改时,片段视图为空

从父活动调用时,片段视图为空

刷新片段内的视图

将视图粘贴在协调器布局内的 viewpager 片段的底部

如果 SQLite 为空或有记录,则更改片段中的视图

选项卡片段内的卡片视图