在一个特殊的Android应用程序中,我想从父母那里删除所有子视图,如果他们的全部或部分内容溢出了他们的父母边界(在窗口焦点改变了)。
我曾尝试在子级和父级宽度上编写手动计算,但我正在寻找适用于各种视图的面向对象解决方案。
答案 0 :(得分:0)
这可能是最简单的方法,只需扩展您正在使用的ViewGroup
并在布局后删除视图。 (ViewGroups包括LinearLayout
,RelativeLayout
,...)
通过覆盖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
的情况下处理事情,你可以在视图布局后使用相同的原则来处理事情。