[英]Android: Swap the position of 2 views
在我的 TableLayout 上,一個 TableRow 有一個 TextView,另一個有一個 Spinner。 當用戶選中一個復選框時,我想交換這兩個視圖的位置。 Spinner需要移動到TextView的position,TextView需要移動到Spinner的Z4757FE07FD4962A8BEEZEA6A76D的position。
Animation 沒關系。 首選是它會立即發生,但如有必要,我可以將其設為超快 animation。
我很驚訝我在試圖找到解決這個問題的方法時遇到了多少麻煩:/在類似的說明中,Android 開發參考確實可以使用一些簡單的示例,例如 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,因為它是我要交換的視圖的父級的類型。 我認為可以將其更新為目標視圖具有的任何父類型。
這是一個通用的 Kotlin function 來交換 2 個視圖的位置 - 我沒有測試它是否適用於您的Spinner
和TextView
的情況,但我目前不明白為什么
fun swapViews(view1: View, view2: View){
val view1Parent = view1.parent as ViewGroup
val view1Params = view1.layoutParams
val view2Parent = view2.parent as ViewGroup
val view2Params = view2.layoutParams
view1Parent.removeView(view1)
view2Parent.removeView(view2)
view2Parent.addView(view1)
view1Parent.addView(view2)
view1.layoutParams = view2Params
view2.layoutParams = view1Params
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.