簡體   English   中英

Android:交換 2 個視圖的 position

[英]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 個視圖的位置 - 我沒有測試它是否適用於您的SpinnerTextView的情況,但我目前不明白為什么

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM