我想禁用图片中显示的滚动视图中的所有字段。我尝试使用下面的代码,但代码只禁用线性布局的直接子项,并且不禁用嵌套线性布局的子项。如何禁用所有子项,包括嵌套布局的子项?
LinearLayout myLayout
= (LinearLayout)v.findViewById(R.id.addEditSection1);
for (int i = 0; i < myLayout.getChildCount(); i++) {
View view = myLayout.getChildAt(i);
view.setEnabled(false);
}
答案 0 :(得分:6)
试试这个递归函数:
public void disableAllViews(View v){
v.setEnabled(false);
if(v instanceof ViewGroup){
for (int i = 0; i < ((ViewGroup)v).getChildCount(); i++) {
View view = ((ViewGroup)v).getChildAt(i);
disableAllViews(view);
}
}
}
并将其命名为
LinearLayout myLayout
= (LinearLayout)v.findViewById(R.id.addEditSection1);
disableAllViews(myLayout);
答案 1 :(得分:1)
安静琐碎:你必须检查递归。 E.g:
protected void disableViewElements(ViewGroup container) {
for (int i = 0; i < container.getChildCount(); i++) {
if(container.getChildAt(i) instanceof ViewGroup ) {
disableViewElements((ViewGroup) container.getChildAt(i));
}
else {
View view = container.getChildAt(i);
view.setEnabled(false);
}
}
}
答案 2 :(得分:0)
使用droidQuery非常简单:
$.with(myLayout).selectAll().disable();
答案 3 :(得分:0)
我在我的项目中使用它
public void setAllViewsEnabled(View view, boolean enabled) {
if (view instanceof ViewGroup)
for (int i = 0; i < ((ViewGroup)view).getChildCount(); i++)
setAllViewsEnabled(((ViewGroup)view).getChildAt(i), enabled);
view.setEnabled(enabled);
}
您可以检查执行最后一行天气,当前视图是TextBox。您也可以决定在使用此功能后启用它。
请记住,如果禁用嵌套的ViewGroup vg1,然后禁用包含ViewGroup vg0,则重新启用vg0将导致vg1启用。为了防止这种情况,您必须为每个ViewGroup保存一个布尔值并更改方法。