2012-08-27 20 views

回答

2

原生android API中沒有這樣的方法。但是你可以自己實現它,這裏有一個例子:

public void moveChildToBack(View child) { 
    int index = indexOfChild(child); 
    if (index > 0) { 
     detachViewFromParent(index); 
     attachViewToParent(child, 0, child.getLayoutParams()); 
    } 
} 

這種方法將只在android.view.ViewGroup類的子類,因爲它使用的保護方法。

主要想法是將您的子視圖移到子列表中的第一個位置,因爲ViewGroup使用它的自然順序來繪製它們,這意味着列表中的第一個視圖將具有最低的Z順序,而最後的視圖將會具有最高的Z次序。

0

嘗試下面的代碼:

private void moveToBack(View currentView) { 
    ViewGroup vg = ((ViewGroup) currentView.getParent()); 
    for(int i=0;i<vg.getChildCount();i++){ 
     View v=vg.getChildAt(i); 
     if(!v.equals(currentView)) 
     { 
      vg.bringChildToFront(v); 
      break; 
     } 
    } 
} 

的想法是把另一個孩子面前。 如果您需要將其設置到極限,請移除「break」。

+0

這是非常「沉重」的解決方案,它使用大量不必要的操作與列表孩子。 – HitOdessit

+0

我不這麼認爲。它只是把另一個孩子帶到前面。你知道findViewById是如何工作的嗎?它也正在做這種循環我猜。在您的分離和附加方法中,android系統正在運行循環以查找分離視圖,然後再次附加視圖 –

+0

爲了實際移動某個孩子(我的意思是給它最低的Z順序),您需要從代碼中刪除「break」,在這種情況下,代碼變得非常「沉重」 - 它會爲列表中的每個其他視圖調用bringChildToFront()。 我建議最簡單的解決方案 - 只需要1次操作,將我們的視圖移到列表的開頭。 – HitOdessit