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