遍历Activity中的控件

2016-11-05  本文已影响1104人  水月心刀

要实现遍历Activity中的控件,可以通过获取Activity的contentView,然后采用getChildCount()和getChildAt()来进行逐个遍历。

遍历Activity中的所有控件,统计数目

  1. 首先获取Activity的contentView
//注意这个vGroup并不是activity.xml中定义的根布局, mRootView才是。
ViewGroup vGroup = (ViewGroup) getWindow().getDecorView().findViewById(android.R.id.content);
ViewGroup mRootView = (ViewGroup)vGroup.getChildAt(0);
  1. 遍历子控件,如果是布局控件则采用递归的方法,继续遍历其子控件。
    private int count = 0;  //用于统计所有控件的数量,包括不可见的控件
    //rootView 传入第一步中获取到的mRootView,即可统计整个Activity的控件数
    private void traversalView(ViewGroup rootView) {
        Log.d("Traversal","start rootView:"+rootView);
        for(int i = 0; i<rootView.getChildCount(); i++)
        {
            View childVg = rootView.getChildAt(i);
            if(childVg instanceof ViewGroup)
                traversalView((ViewGroup) childVg);
            else
                count++;
        }
        count++; //统计本布局控件
        Log.d("Traversal","end rootView:" + rootView+" count:"+count);
    }

遍历Activity中的所有特定类型的控件

    private int btnCount = 0;//用于统计所有Button控件的数量,包括不可见的控件
    //rootView 传入第一步中获取到的mRootView
    private void traversalView(ViewGroup rootView) {
        Log.d("Traversal","start rootView:"+rootView);
        for(int i = 0; i<rootView.getChildCount(); i++)
        {
            View childVg = rootView.getChildAt(i);
            if(childVg instanceof ViewGroup)
                traversalView((ViewGroup) childVg);
            else if(childVg instanceof Button)
                btnCount++;
        }
        Log.d("Traversal","end rootView:" + rootView+" btnCount:"+btnCount);
    }
    private int btnCount = 0;//用于统计所有控件的数量,包括不可见的控件
    //rootView 传入第一步中获取到的mRootView
    private void traversalView(ViewGroup rootView) {
        for(int i = 0; i<rootView.getChildCount(); i++)
        {
            View childVg = rootView.getChildAt(i);
            if(childVg instanceof ViewGroup)
                traversalView((ViewGroup) childVg);
            else if(childVg instanceof Button)
                ((Button)childVg).setClickable(false);//设置所有按钮均不响应点击事件
        }
    }
上一篇 下一篇

猜你喜欢

热点阅读