美文网首页
遍历Activity中的控件

遍历Activity中的控件

作者: 水月心刀 | 来源:发表于2016-11-05 09:57 被阅读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中的所有特定类型的控件

    • 假设我们需要遍历整个Activity中所有的Button控件,可以对上述第二步的代码稍作改动,更改后代码如下:
        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);//设置所有按钮均不响应点击事件
            }
        }
    

    相关文章

      网友评论

          本文标题:遍历Activity中的控件

          本文链接:https://www.haomeiwen.com/subject/enowuttx.html