Android:交换2个视图的位置

时间:2011-11-18 22:28:17

标签: android android-layout android-widget

在我的TableLayout上,一个TableRow有一个TextView,另一个有一个Spinner。当用户选中复选框时,我想交换这两个视图的位置。 Spinner需要移动到TextView的位置,TextView需要移动到Spinner的位置。

动画并不重要。偏好是它会立即发生,但如果有必要,我可以使它成为超快动画。

我一直惊讶于我试图找到解决这个问题的方法有多少麻烦:/在类似的说明中,Android dev ref可以真正使用一些简单的例子和​​MSDN库。

谢谢!

2 个答案:

答案 0 :(得分:4)

您可以尝试删除第一个TextView,然后使用addView将其添加回线性布局的末尾。

TextView tv = (TextView)layout.getChildAt(0);
layout.removeView(tv);
layout.addView(tv);

这不是一个非常干净的代码,但我可能会工作:)

答案 1 :(得分:3)

以下是我最终用于交换视图的代码:

import android.widget.TableRow;

TableRow trI = (TableRow) findViewById(R.id.tr_input_row);
TableRow trO = (TableRow) findViewById(R.id.tr_output_row);
View v1 = (View) findViewById(R.id.View1);
View v2 = (View) findViewById(R.id.View2);

if (isInput()) {
    trO.removeView(v1);
    trI.removeView(v2); 
    trO.addView(v2);
    trI.addView(v1);
} else {
    trO.removeView(v2);
    trI.removeView(v1); 
    trO.addView(v1);
    trI.addView(v2);
}

就我而言,视图位于TableLayout的两个不同行中。我正在使用TableRow,因为它是我要交换的视图的父类型。我认为这可以更新为目标视图的任何类型的父级。