Android改变view容器中的重叠位置

我们都知道Android应用的所有UI组件都继承了View类,View组件非常类似于Swing编程中的JPanel,它代表一个空白的矩形区域,View类还有一个重要的子类:ViewGroup,但ViewGroup通常作为其他组件的容器使用。Android的所有UI组件都是建立在View,ViewGroup基础之上的

对于一个Android应用的图形用户界面来说,ViewGroup作为容器来盛装其他组件,当我们往ViewGroup中调用addView方法添加组件的时候,不重写addView方法的话,默认父控件就会按照添加顺序依次绘制加入的控件,而且默认后加入的子控件会覆盖新加入的子控件,如果我们想自己控制子控件的显示顺序的话,一方面可以自己重写addView方法,另一方便通过查阅ViewGroup源码我们可以看到有一个这样的方法:

1
2
3
4
5
6
7
8
public void bringChildToFront(View child) {
int index = indexOfChild(child);
if (index != 0) {
    removeFromArray(index);
    addInArray(child, mChildrenCount);
    child.mParent = this;
}
}

从名字我们就可以看到这个方法是将指定的子控件带到最前面,从实现方法可以看出,先得到子控件的index,然后将对应index的子控件从控件顺序数组中一处,然后再重新加入到数组,这样一来,该子控件就到数组的结尾了,也就是到最前面了。
最后一步很重要,就是不要忘了要调用postInvalidate()方法来刷新