web-dev-qa-db-ja.com

AndroidでLinearLayoutのすべての子を無効/有効にする方法

特定のレイアウトのすべての子をプログラミングする方法はありますか?

たとえば、2つの子を持つこのレイアウトがあります。

<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);

2つのテキストビューを無効にするため。

どのように考えていますか?

19
user733284

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

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);
        }
    }
}

次の参照 プログラムで特定のレイアウトのすべてのアイテムを無効にする方法はありますか?

14
Parag Chauhan

子を反復処理するのではなく、レイアウト自体でsetVisibility(View.GONE)を実行するだけではどうですか。

7
Michael

遅いかもしれませんが、Android:duplicateParentState="true"の子のLinearLayout

このようなもの:

 <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>
1
CLucera

元のビューのmatch_parentとなる別の透明なレイアウトを追加し、すべての子を無効にし、子を有効にしてから可視性を変更して、可視性を可視に変更します。

0