禁用线性布局内的所有项目,包括嵌套线性布局内的项目

时间:2013-12-31 17:49:32

标签: android android-linearlayout children

enter image description here

我想禁用图片中显示的滚动视图中的所有字段。我尝试使用下面的代码,但代码只禁用线性布局的直接子项,并且不禁用嵌套线性布局的子项。如何禁用所有子项,包括嵌套布局的子项?

LinearLayout myLayout
    = (LinearLayout)v.findViewById(R.id.addEditSection1);

for (int i = 0; i < myLayout.getChildCount();  i++) {
    View view = myLayout.getChildAt(i);
    view.setEnabled(false);
}

4 个答案:

答案 0 :(得分:6)

试试这个递归函数:

public void disableAllViews(View v){
    v.setEnabled(false);
    if(v instanceof ViewGroup){

    for (int i = 0; i < ((ViewGroup)v).getChildCount();  i++) {
        View view = ((ViewGroup)v).getChildAt(i);
        disableAllViews(view);
    }
    }
}

并将其命名为

LinearLayout myLayout
    = (LinearLayout)v.findViewById(R.id.addEditSection1);
disableAllViews(myLayout);

答案 1 :(得分:1)

安静琐碎:你必须检查递归。 E.g:

protected void disableViewElements(ViewGroup container) {
   for (int i = 0; i < container.getChildCount();  i++) {
     if(container.getChildAt(i) instanceof ViewGroup ) {
         disableViewElements((ViewGroup) container.getChildAt(i));
     }
     else {
       View view = container.getChildAt(i);
       view.setEnabled(false);
     }
   }

}

答案 2 :(得分:0)

使用droidQuery非常简单:

$.with(myLayout).selectAll().disable();

答案 3 :(得分:0)

我在我的项目中使用它

public void setAllViewsEnabled(View view, boolean enabled) {
    if (view instanceof ViewGroup)
        for (int i = 0; i < ((ViewGroup)view).getChildCount();  i++)
            setAllViewsEnabled(((ViewGroup)view).getChildAt(i), enabled);
    view.setEnabled(enabled);
}

您可以检查执行最后一行天气,当前视图是TextBox。您也可以决定在使用此功能后启用它。

请记住,如果禁用嵌套的ViewGroup vg1,然后禁用包含ViewGroup vg0,则重新启用vg0将导致vg1启用。为了防止这种情况,您必须为每个ViewGroup保存一个布尔值并更改方法。