Android:锁定/冻结布局的时间更改是以编程方式进行的吗?

时间:2014-12-12 09:51:56

标签: android android-layout

我以编程方式重新组织我的布局添加和删除多个视图。问题是在第一个removeView活动/片段开始测量/布局剩余视图之后。在完成所有更改之前,是否可以暂停此操作?

2 个答案:

答案 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