Android 安卓与布林格希尔多夫朗的对面

Android 安卓与布林格希尔多夫朗的对面,android,android-view,Android,Android View,有没有一种方法与布林格希多夫伦相反。我想把孩子送回去。我该怎么做呢?本机android API中没有这样的方法。但您可以自己实现,下面是一个示例: public void moveChildToBack(View child) { int index = indexOfChild(child); if (index > 0) { detachViewFromParent(index); attachViewToParent(child, 0,

有没有一种方法与布林格希多夫伦相反。我想把孩子送回去。我该怎么做呢?

本机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顺序最高。

请尝试以下代码:

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;
        }
    }
}
private void moveToBack(查看当前视图){
ViewGroup vg=((ViewGroup)currentView.getParent());
对于(int i=0;i
mlastinex=((ViewGroup)getParent()).indexOfChild(this);
在调用bringChildToFront之前,可以录制mLastIndex,然后调用moveToBack将视图发送回。
专用void moveToBack(视图当前视图){
ViewGroup ViewGroup=((ViewGroup)currentView.getParent());

对于(int i=0;它非常“重”解决方案,它对列表子项使用了很多不必要的操作。我不这么认为。它只是获取另一个子项并将其带到前面。你知道findViewById是如何工作的吗?我猜它也在做这种循环。在你的分离和附加方法中,android系统正在运行循环来查找要分离的视图和在重新附加它的位置上,为了实际将某个子对象向后移动(我的意思是给它最低的Z顺序),您需要从代码中删除“break”,在这种情况下,您的代码将变得非常“重”-它将调用bringChildToFront()对于列表中的每个其他视图。我建议最简单的解决方案-只需1次操作,将视图移动到列表的开头。我同意您的观点,这是一个从您的末端开始的简单操作…但是,当您附加一个带位置的视图时,我想它在内部执行相同的重新排列。例如,在数组中,如果我们需要在位置3插入一个值,我们需要将元素从3向前移动一步。而且…我告诉你…这是我的猜测。如果是这样的话…在你的情况下…分离,里面会有一个环,连接,里面也会有一个环。
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));

    }
}