是否有一个与bringChildToFront相反的方法。我想把孩子送回去。我怎么能这样做?
答案 0 :(得分: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阶。
答案 1 :(得分: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;”。
答案 2 :(得分: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));
}
}