如何找到左,右,上,下视图

时间:2012-10-07 21:26:35

标签: android view imageview tablelayout tablerow

我需要知道TableLayout中添加的每个View的左,右,上,下(LRTB)视图 场景如下

TableLayout有3个TableRows
每个TableRow都有3个ImageViews 像3x3 ImageViews矩阵一样

  

XXX
XXX
XXX

我知道TableLayout和TableRow有一个名为getChildAt(int index)的方法 但如何使用该方法或任何其他方法来查找每个视图的LRTB视图

2 个答案:

答案 0 :(得分:2)

我猜你正在研究tick tac toe kinda app。所以基本上你需要一个带有3个TableRow的TableLayout。每行将有3个子视图。因此,如果您想获取LRTB视图,可以调用这些方法 -

View getLeft(View view){
    TableRow row = (TableRow) view.getParent();
    int pos = 0;
    for(int i = 0;i<3;i++){
       if(view == row.getChildAt(i)){
          pos = i;
          break;
       }
    }
    if(pos==0)
        return null;
    return row.getChildAt(pos-1);
}


View getRight(View view){
    TableRow row = (TableRow) view.getParent();
    int pos = 0;
    for(int i = 0;i<3;i++){
       if(view == row.getChildAt(i)){
          pos = i;
          break;
       }
    }
    if(pos==2)
        return null;
    return row.getChildAt(pos+1);
}

View getTop(View view){
    TableRow row = (TableRow) view.getParent();
    int rowPos = 0;
    for(int i = 0;i<3;i++){
        if(tableLayout.getChildAt(i)==row){
            rowPos=i;
        }
    }
    int pos = 0;
    for(int i = 0;i<3;i++){
       if(view == row.getChildAt(i)){
          pos = i;
          break;
       }
    }
    if(pos==0 || rowPos==0)
        return null;
    return tableLayout.getChildAt(rowPos-1).getChildAt(pos-1);
}

View getBottom(View view){
    TableRow row = (TableRow) view.getParent();
    int rowPos = 0;
    for(int i = 0;i<3;i++){
        if(tableLayout.getChildAt(i)==row){
            rowPos=i;
        }
    }
    int pos = 0;
    for(int i = 0;i<3;i++){
       if(view == row.getChildAt(i)){
          pos = i;
          break;
       }
    }
    if(pos==2 || rowPos==2)
        return null;
    return tableLayout.getChildAt(rowPos+1).getChildAt(pos+1);
}

答案 1 :(得分:1)

您可以使用getChildAt()方法确定您的任何行的位置。这将涵盖获得左/右视图。你可以尝试使用TableLayout的getChildAt方法来查找行,但这可能比它的价值更麻烦。但是,为了使它更简单,您可以为每个imageView设置函数,例如

getTopLeft(){ 
    myTableLayout.getChildAt(0).getChildAt(0); 
}
getTopMiddle(){ 
    myTableLayout.getChildAt(0).getChildAt(1); 
}
getTopRight(){ 
    myTableLayout.getChildAt(0).getChildAt(2); 
}

等。

但是,使用正确的行命名(例如row_top,row_middle,row_bottom)跟踪当前行的上方/下方哪一行可能更简单,并使用另一行的getChildAt()方法。

但是,我应该注意,所有这些方法都要求您至少知道您正在查看的视图的位置。除非您知道给定视图的位置,否则无法知道哪个视图位于给定视图之上。但老实说,除了在行中添加/删除ImageViews之外,你可能只考虑改变它们的drawable,这样你就可以构建方法来获取视图的ID并返回上面,下面的视图等。