特定のレイアウトのすべての子をプログラミングする方法はありますか?
たとえば、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つのテキストビューを無効にするため。
どのように考えていますか?
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.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);
}
}
}
子を反復処理するのではなく、レイアウト自体でsetVisibility(View.GONE)を実行するだけではどうですか。
遅いかもしれませんが、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>
元のビューのmatch_parentとなる別の透明なレイアウトを追加し、すべての子を無効にし、子を有効にしてから可視性を変更して、可視性を可視に変更します。