Java 如何在Android中禁用/启用LinearLayout上的所有子项

Java 如何在Android中禁用/启用LinearLayout上的所有子项,java,android,android-layout,android-linearlayout,Java,Android,Android Layout,Android Linearlayout,有没有办法通过编程使某个布局的所有子级 例如,我有两个孩子的布局: <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"

有没有办法通过编程使某个布局的所有子级

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

<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扩展了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.
}
 <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>
LinearLayout myLayout=(LinearLayout)findViewById(R.id.linearLayout1);
对于(int i=0;i
为什么不在布局本身上执行setVisibility(View.GONE),而不是遍历子级?

您也可以禁用/启用而不使用setVisibility()

将View.OnClickListener添加到复选框中,然后将要禁用的视图传递到以下函数中

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);
        }
    }
}
private void enableDisableView(视图视图,布尔启用){
view.setEnabled(已启用);
if(视图组的视图实例){
视图组组=(视图组)视图;
对于(int idx=0;idx

通过以下引用

只需添加另一个与原始视图的父视图匹配的透明布局,并将其可见性更改为可见(当您要禁用所有子视图并启用子视图时),然后只需将可见性更改为“已消失”

可能已经晚了,但您只需添加
android:duplicateParentState=“true”
线性布局的子级中

大概是这样的:

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.
}
 <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>


如果不使用setVisibility(View.GONE),就可以在Android中禁用/启用LinearLayout上的所有子级。对于嵌套布局@sberg413blantant copy from,我该怎么做呢?您至少可以考虑一下。您可能有一个包含其他自定义视图的自定义视图。您可能希望隐藏挂在自定义视图上的随机视图,而不是自定义视图本身中的视图。例如,这在图书馆中很常见。如果您隐藏自定义视图,您将隐藏所有内容,而不仅仅是库用户添加的孩子。请详细说明您的答案,并添加有关您提供的解决方案的更多描述。您可以在此处查看