获取android活动中的项目列表

时间:2014-06-25 20:16:01

标签: android

我想知道是否有办法在数组中获取或列出我活动中的所有项目,例如按钮,图像视图,文本视图等及其坐标。 我正在做一个接收坐标的应用程序,它必须搜索该坐标中是否有任何项目,如果它找到一个按钮,例如,它必须执行按钮操作

2 个答案:

答案 0 :(得分:0)

首先,您需要获取对活动外部视图的引用。这可以做到 通过调用

 ViewGroup externalView =(ViewGroup)v.getParent();

v是先前由findViewById()

获得的任何视图

如果您有外部视图,那么,如果您只对1级儿童感兴趣 你可以简单地迭代它的内容:

int numChilds = externalView.getChildCount();

for (int i = 0; i < numChilds; ++i) {
    View child = externalView.getChildAt(i);
    // and process child
}

但是,如果您对所有级别的所有子视图感兴趣,请使用递归:

void processAllLevels(View v) {

   // process v

   if (!(v instanceof ViewGroup)) {
       // only views of type ViewGroup has children
       return;
   }

   ViewGroup container = (ViewGroup)v;
   int numChilds = container.getChildCount();

   for (int i = 0; i < numChilds; ++i) {
        View child = container.getChildAt(i);
        // process child
   }

}

通过调用:

开始递归
processAllLevels(externalView);

注意 - 只有在调用setContentView()之后才能创建

注2 - 当涉及密集活动时,上述逻辑可能会很慢。

答案 1 :(得分:0)

也许这两种方法可以帮助你

private boolean isAViewHere(int x,int y){
        for(View view:getContainedViews())
        {
            int viewX,viewY,width,height;
            int [] location =new int[2] ;
            view.getLocationOnScreen(location);
            viewX = location[0];
            viewY = location[1];
            view.measure(0, 0);
            width = view.getMeasuredWidth();
            height = view.getMeasuredHeight();
            if(x>=viewX&&x<(viewX+width)&&y>=viewY&&y<(viewY+height))
                return true;
        }
        return false ;
    }

private ArrayList<View> getContainedViews(){
        ArrayList<View> res = new ArrayList<View>();
        View rootView = findViewById(android.R.id.content);
        if(rootView instanceof ViewGroup) //to be safe ;
        {
            ViewGroup containerView =(ViewGroup)rootView;
            for(int i=0;i<containerView.getChildCount();i++)
            {
                res.add(containerView.getChildAt(i));
            }
        }
        return res;
    }