获取Android视图的所有子视图

6

我想获取RelativeLayout的所有子项。使用以下代码可以实现:

aditionView.getAllChildren().

现在子视图按照添加到该视图中的顺序出现。但我希望它们按照在视图中放置的位置的递增顺序排列。


“Order of position” 似乎含糊不清。您的顺序是从左到右和从上到下,还是从上到下和从左到右,或者其他什么顺序?有许多种排列方式。 - satur9nine
1个回答

11

你可以通过View.getLeft()对子元素进行排序。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    logCoordinates();
}

private void logCoordinates() {
    RelativeLayout layout = (RelativeLayout)findViewById(R.id.layout);
    for (int i = 0; i < layout.getChildCount(); i++) {
        View child = layout.getChildAt(i);
        Log.i("tag", String.format("%d %d %d %d", child.getLeft(), child.getTop(), child.getRight(), child.getBottom()));
    }
}

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    logCoordinates();
}
请比较从onCreate()onWindowFocusChanged()调用的logCoordinates()的日志输出。在onCreate()中无法获取视图坐标(为什么?)。请参见此处的讨论:如何获取Button的高度和宽度

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接