Android中似乎存在一个bug,会导致View.bringToFront
无法正常工作。
如果我在GridView中排列了一些视图,并想通过调用bringToFront()将某个视图置于最前面,那么它可能会被移动到GridView的右下角位置。
这里发生了一些不可思议的事情,因此我不能使用bringToFront()。如果我不调用它,则一切都正常。但是视图会重叠 - 如果我使用缩放动画来放大某个视图,则它会被下方和右侧的视图部分遮挡。
我已经检查了bringToFront方法的源代码,它会调用parent.bringChildToFront(...)方法。
就是这个方法:
public void bringChildToFront(View child) {
int index = indexOfChild(child);
if (index >= 0) {
removeFromArray(index);
addInArray(child, mChildrenCount);
child.mParent = this;
}
}
看起来它< strong>毫不留情地从自己中移除了视图!一个ViewGroup难道就不能以其他方式管理Z索引,而只能在控件之间进行调整吗?很显然,当GridView移除其子项并将其重新添加时,它会被放置在网格的末尾!
是否有任何方法可以显示一个视图在其他视图之上,而不必诉诸于一些黑客技巧?我想到的一个办法是创建一个位于GridView上方的另一个视图,它将出现在我尝试bringToFront()的视图之上,但我不喜欢这个解决方案。