如何在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"
            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);

为了禁用两个文本视图。

任何想法如何?


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

答案 2

您还可以在不使用 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);
        }
    }
}

没有办法以编程方式禁用特定布局中的所有项目?


推荐