如何禁用Activity中的所有视图,除了特定的视图?

时间:2018-04-18 12:16:19

标签: android

我有一个Activity,其中包含很多视图。我需要禁用用户交互的所有视图,除了特定的视图。我该如何快速完成这项工作?

我唯一的解决方案是手动禁用每个视图。但要做到这一点有太多的意见。我该怎么做?

3 个答案:

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