我有一个Activity,其中包含很多视图。我需要禁用用户交互的所有视图,除了特定的视图。我该如何快速完成这项工作?
我唯一的解决方案是手动禁用每个视图。但要做到这一点有太多的意见。我该怎么做?
答案 0 :(得分:3)
我认为您正在寻找循环视图的方法,您可以使用此代码:
ViewGroup rootView=findViewById(R.id.my_root_view_id);
for(int i=0;i<rootView.getChildCount();i++){
View view=rootView.getChildAt(i);
if(view.getId()==R.id.my_specifc_view_id){
//Do something
}else{
//Do something
}
}
您的根视图应该是像LinearLayout
这样的容器布局之一答案 1 :(得分:1)
获取根ViewGroup(例如LineairLayout),然后通过它的子项进行迭代,然后更改可见性
例如
LinearLayout layout = findViewById("root");
for(int i=0;i<layout.getChildCount();i++)
{
View v = (View)layout.getChildAt(i)
// hide `v`
}
你也没有说过,所以在删除它之前还要在v变量周围添加一个if语句。在if语句中,您可以检查id
答案 2 :(得分:0)
首先列出要在其中启用视图的视图ID:
List<Integer> viewsToEnable = new ArrayList<>();
viewsToEnable.add(R.id.btn_save);
viewsToEnable.add(R.id.tv_name);
viewsToEnable.add(R.id.edt_name);
现在检查make方法以启用或禁用视图:
public void enableViews(List<Integer> viewsToEnable, int parentViewResourceId) {
ViewGroup parentView = findViewById(parentViewResourceId);
for (int i = 0; i < parentView.getChildCount(); i++) {
View view = parentView.getChildAt(i);
if (viewsToEnable.contains(view.getId())) {
view.setEnabled(true);
} else {
view.setEnabled(false);
}
}
}
现在在活动或片段中使用上述方法:
enableViews(viewsToEnable,R.id.parentView);