删除其父级边界溢出的所有子项

时间:2016-01-23 18:24:29

标签: android removechild object-oriented-analysis

在一个特殊的Android应用程序中,我想从父母那里删除所有子视图,如果他们的全部或部分内容溢出了他们的父母边界(在窗口焦点改变了)。

我曾尝试在子级和父级宽度上编写手动计算,但我正在寻找适用于各种视图的面向对象解决方案。

1 个答案:

答案 0 :(得分:0)

这可能是最简单的方法,只需扩展您正在使用的ViewGroup并在布局后删除视图。 (ViewGroups包括LinearLayoutRelativeLayout,...)

通过覆盖onLayout,您可以迭代您的孩子并删除任何不在其父级范围内的视图。

需要注意的事项:这可能会触发另一个布局调用,因此请务必妥善处理。

@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
    // call super to layout children and have their bounds set
    super.onLayout(changed, left, top, right, bottom);

    // Iterate over all children
    for (int i = 0; i < getChildCount(); i++) {
        View child = getChildAt(i);
        if (child.getLeft() < left
                // ... add top / bottom
                || child.getRight() > right) {
            removeView(child);
        }
    }
}

如果你想在没有扩展ViewGroup的情况下处理事情,你可以在视图布局后使用相同的原则来处理事情。