是否通过编程确定某个布局的所有子项?
例如,我有两个孩子的布局:
<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);
为了禁用两个textview。
知道怎么做?
答案 0 :(得分:26)
LinearLayout扩展了ViewGroup,因此您可以使用getChildCount()和getChildAt(索引)方法迭代您的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.
}
答案 1 :(得分:13)
您也可以在不使用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?
答案 2 :(得分:7)
为什么不在布局本身上执行setVisibility(View.GONE),而不是遍历子项?
答案 3 :(得分:0)
只需添加另一个透明布局,该布局将匹配原始视图的match_parent,并在您要禁用所有子项时将其可见性更改为可见,并启用子项,然后将可见性更改为已消失
答案 4 :(得分:0)
也许已经晚了,但是您可以在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>