Android:交换2个视图的位置

Android:交换2个视图的位置,android,android-layout,android-widget,Android,Android Layout,Android Widget,在我的TableLayout上,一个TableRow有一个TextView,另一个有一个微调器。当用户选中复选框时,我想交换这两个视图的位置。微调器需要移动到TextView的位置,TextView需要移动到微调器的位置 动画并不重要。首选的是它会立即发生,但如果必要的话,我可以制作一个超快速的动画 我感到惊讶的是,我在寻找这个问题的解决方案时遇到了这么多麻烦:/类似地,Android dev ref可以在MSDN库中使用一些简单的示例 谢谢 您可以尝试删除第一个TextView,然后使用add

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

动画并不重要。首选的是它会立即发生,但如果必要的话,我可以制作一个超快速的动画

我感到惊讶的是,我在寻找这个问题的解决方案时遇到了这么多麻烦:/类似地,Android dev ref可以在MSDN库中使用一些简单的示例


谢谢

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

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

这不是一个真正干净的代码,但我认为这可能有用:)

以下是我用来交换视图的代码:

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是因为它是我要交换的视图的父视图的类型。我假设可以将其更新为目标视图具有的任何类型的父视图。

Nice。我在周五下班前就开始实现这个方法,但还没有机会测试它。我不认为这是一个不干净的代码。与Windows应用程序表单相比,这些Android表单更类似于HTML表单。在我发布了这个问题之后,我突然想到,我应该更像HTMLDOM,而不是放在画布上(x,y)位置的项目。要在HTMLDOM中移动项目,必须删除并重新添加它们