0

以下のように、TableLayout Scenario に追加された各ビューの左、右、上、下 (LRTB) ビューを知る必要があります。

TableLayout には 3つの
TableRows があります 各 TableRow には 3 つの ImageViews
があります ImageViews の 3x3 マトリックスのように

XXX
XXX
XXX

TableLayout と TableRow には getChildAt(int index) という名前のメソッドがあることは知っていますが、そのメソッドを使用する方法または各ビューの LRTB ビューを見つける他の方法

4

2 に答える 2

2

私はあなたがちょっとしたアプリに取り組んでいると思います。したがって、基本的には、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);
}
于 2012-10-07T22:00:26.007 に答える
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()メソッドを使用する方が簡単な場合があります。

ただし、これらの方法はすべて、少なくとも見ているビューの位置を知っている必要があることに注意してください。特定のビューがどこにあるかがわからない限り、特定のビューの上にあるビューを知る良い方法はありません。しかし、正直なところ、ドローアブルを変更することを検討する行から ImageView を追加/削除する代わりに、ビューの ID を取得して上、下などのビューを返すメソッドを構築できます。

于 2012-10-07T21:55:02.903 に答える