4

有没有一种与bringChildToFront相反的方法。我想把孩子送回去。我怎样才能做到这一点?

4

3 回答 3

3

本机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-命令。

于 2012-08-27T12:49:01.317 回答
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;”。

于 2012-08-27T12:50:13.820 回答
0
mLastIndex = ((ViewGroup)getParent()).indexOfChild(this);


before you call bringChildToFront,you can record the mLastIndex,then you call moveToBack to send view back.


private void moveToBack(View currentView) {
    ViewGroup viewGroup = ((ViewGroup) currentView.getParent());
    for(int i = 0; i<viewGroup.getChildCount() - (mLastIndex+1); i++) {
        LogUtils.d(TAG,viewGroup.getChildAt(mLastIndex)+"");
        viewGroup.bringChildToFront(viewGroup.getChildAt(mLastIndex));

    }
}
于 2018-04-01T07:23:57.770 回答