我需要知道 TableLayout 场景中添加的每个视图的左、右、上、下(LRTB)视图,如下所示
TableLayout 有 3 个 TableRows
每个 TableRow 有 3 个 ImageViews
就像一个 3x3 的 ImageViews 矩阵
XXXXXXXXX
_
_
我知道 TableLayout 和 TableRow 有一个名为 getChildAt(int index) 的方法,但是如何使用该方法或任何其他方法来查找每个视图的 LRTB 视图
我需要知道 TableLayout 场景中添加的每个视图的左、右、上、下(LRTB)视图,如下所示
TableLayout 有 3 个 TableRows
每个 TableRow 有 3 个 ImageViews
就像一个 3x3 的 ImageViews 矩阵
XXXXXXXXX
_
_
我知道 TableLayout 和 TableRow 有一个名为 getChildAt(int index) 的方法,但是如何使用该方法或任何其他方法来查找每个视图的 LRTB 视图
我猜你正在开发tick tac toe kinda 应用程序。所以基本上你需要一个包含 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);
}
您可以使用该getChildAt()
方法来确定您的任何行的位置。这将涵盖获取左/右视图。您可以尝试使用 TableLayout 的 getChildAt 方法来查找行,但这可能比它的价值更麻烦。但是,为了让它更简单一点,您可以为每个 imageView 设置函数,例如
getTopLeft(){
myTableLayout.getChildAt(0).getChildAt(0);
}
getTopMiddle(){
myTableLayout.getChildAt(0).getChildAt(1);
}
getTopRight(){
myTableLayout.getChildAt(0).getChildAt(2);
}
, ETC。
getChildAt()
但是,使用正确的行命名(例如 row_top、row_middle、row_bottom)并使用另一行的方法来跟踪当前行上方/下方的行可能更简单。
但是,我应该注意,所有这些方法都要求您至少知道您正在查看的视图的位置。除非您知道给定视图在哪里,否则没有一个好方法可以知道哪个视图在给定视图之上。但老实说,不是从行中添加/删除 ImageViews,您可能会考虑只更改它们的可绘制对象,这样您就可以构建接收视图 ID 并返回上方、下方等视图的方法。