【问题标题】:How to disable/enable all children on LinearLayout in Android如何在 Android 中禁用/启用 LinearLayout 上的所有子项
【发布时间】:2011-10-07 13:15:03
【问题描述】:

有没有办法对某个布局的所有孩子进行编程?

例如,我有两个孩子的布局:

<LinearLayout android:layout_height="wrap_content"
        android:id="@+id/linearLayout1" android:layout_width="fill_parent">
        <SeekBar android:layout_height="wrap_content" android:id="@+id/seekBar1"
            android:layout_weight="1" android:layout_width="fill_parent"></SeekBar>
        <TextView android:id="@+id/textView2" android:text="TextView"
            android:layout_width="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge"
            android:layout_height="wrap_content"></TextView>
    </LinearLayout>

我想做类似的事情:

LinearLayout myLayout = (LinearLayout) findViewById(R.id.linearLayout1);
myLayout.setEnabled(false);

为了禁用两个文本视图。

知道怎么做吗?

【问题讨论】:

    标签: java android android-layout android-linearlayout


    【解决方案1】:

    LinearLayout 扩展了 ViewGroup,因此您可以使用 getChildCount() 和 getChildAt(index) 方法来遍历您的 LinearLayout 子级,并对它们做任何您想做的事情。我不确定你所说的启用/禁用是什么意思,但如果你只是想隐藏它们,你可以做 setVisibility(View.GONE);

    所以,它看起来像这样:

    LinearLayout myLayout = (LinearLayout) findViewById(R.id.linearLayout1);
    for ( int i = 0; i < myLayout.getChildCount();  i++ ){
        View view = myLayout.getChildAt(i);
        view.setVisibility(View.GONE); // Or whatever you want to do with the view.
    }
    

    【讨论】:

    • 在不使用 setVisibility(View.GONE) 的情况下,可以在 Android 中禁用/启用 LinearLayout 上的所有子项
    • 嵌套布局@SBerg413我该怎么做
    【解决方案2】:

    您也可以在不使用 setVisibility() 的情况下禁用/启用

    将 View.OnClickListener 添加到您的 CheckBox 中,然后将要禁用的视图传递给以下函数...

    private void enableDisableView(View view, boolean enabled) {
        view.setEnabled(enabled);
    
        if ( view instanceof ViewGroup ) {
            ViewGroup group = (ViewGroup)view;
    
            for ( int idx = 0 ; idx < group.getChildCount() ; idx++ ) {
                enableDisableView(group.getChildAt(idx), enabled);
            }
        }
    }
    

    以下参考Is there a way to disable all the items in a specific layout programmaticaly?

    【讨论】:

    【解决方案3】:

    为什么不在布局本身上执行 setVisibility(View.GONE),而不是遍历子级?

    【讨论】:

    • 您可能有一个自定义视图,其中包含一些其他自定义视图。您可能希望隐藏悬挂在自定义视图上的随机视图,而不是自定义视图本身中的视图。例如,这在库中很常见。如果您隐藏自定义视图,您将隐藏所有内容,而不仅仅是图书馆用户添加的子项。
    【解决方案4】:

    也许迟到了,但你可以在LinearLayout的子元素中添加android:duplicateParentState="true"

    类似这样的:

     <LinearLayout
         android:id="@+id/container"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:orientation="vertical">
    
         <TextView
             android:id="@+id/textA"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:duplicateParentState="true"
             android:text="First Text"/>
    
         <TextView
             android:id="@+id/textB"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:duplicateParentState="true"
             android:text="Second Text"/>
    
     </LinearLayout>
    

    【讨论】:

      【解决方案5】:

      只需添加另一个透明布局,它将匹配原始视图的父级,并在您想要禁用所有子级并启用子级时将其可见性更改为可见,然后只需将可见性更改为消失

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-15
      • 2011-10-07
      • 1970-01-01
      相关资源
      最近更新 更多