我以编程方式重新组织我的布局添加和删除多个视图。问题是在第一个removeView
活动/片段开始测量/布局剩余视图之后。在完成所有更改之前,是否可以暂停此操作?
答案 0 :(得分:1)
受到Arkde帖子的启发,我终于找到了解决问题的方法。我只是覆盖requestLayout()
并阻止呼叫根据需要传播到父ViewGroup
。这使我能够在我重新组织视图时停止布局过程的干扰。
答案 1 :(得分:0)
第一个想法
在布局期间删除一系列视图。removeView()
ViewGroup
方法如下所示
public void removeView(View view) {
removeViewInternal(view);
requestLayout();
invalidate(true);
}
对requestLayout()
和invalidate()
的调用会导致您的小组触发衡量/布局方法。
为了避免这种机制,您应该扩展ViewGroup
并覆盖此方法,或创建一个新方法以删除视图块,然后触发requestLayout()
和invalidate()
或者,如果要删除从某个位置开始的所有视图,请到布局使用中的另一个位置,
public void removeViews(int start, int count) {
removeViewsInternal(start, count);
requestLayout();
invalidate(true);
}
在布局期间删除一系列视图。
第二个想法
如果您希望您的布局是动态的,并且您希望以语法方式添加或删除部分屏幕,我认为您应该使用Fragments
代替。
第三个想法
当您需要更改布局时,只需以编程方式创建另一个ViewGroup
(或通过从xml不同的布局中填充),并添加您需要的所有子项。之后,使用ViewGroup.removeAllViews()
从当前视图中删除所有视图,然后添加新创建的ViewGroup
。