我想在动画期间更改某些视图的z顺序
在4.1.2以上的机器人上运行得很好,在4.1.2以下的机器人上,Z顺序没有变化,顶视图仍然在顶部。
这就是我想要的。
myView.bringToFront();
((View)myView.getParent()).invalidate();
如何让它在旧设备上运行?
答案 0 :(得分:22)
/**
* Change the view's z order in the tree, so it's on top of other sibling
* views. This ordering change may affect layout, if the parent container
* uses an order-dependent layout scheme (e.g., LinearLayout). Prior
* to {@link android.os.Build.VERSION_CODES#KITKAT} this
* method should be followed by calls to {@link #requestLayout()} and
* {@link View#invalidate()} on the view's parent to force the parent to redraw
* with the new child ordering.
*
* @see ViewGroup#bringChildToFront(View)
*/
public void bringToFront() {
if (mParent != null) {
mParent.bringChildToFront(this);
}
}
根据这个,我只是错过了一行
((View)myView.getParent()).requestLayout();
它有效!
答案 1 :(得分:11)
我尝试了所有这些。一个RelativeLayout应该在Button的顶部,但它只是不想服从。
最后,我通过将android:elevation="2dp"
添加到RelativeLayout来解决它。
高程值仅用于API级别21及更高级别。在我的情况下,API级别21以下的所有内容都很好,上面的所有内容都不是。
希望这可以帮助某人:)
答案 2 :(得分:4)
我希望这对某些人有用。 上述解决方案均不适合我。为什么?因为我想要在叶子中的视图比其他视图的高度小。因此无论如何,具有更高海拔的视图始终在前方。
答案 3 :(得分:1)
如果父视图是relativelayout,那么它可能会起作用,也可能不起作用。我尝试了bringToFront
,requestLayout
和removeView; addView
,但没有运气。我的解决方案是将所有内容放在framelayout中。我在顶部需要的是移动了framelayout的buttom,其中可见性不可见,然后在代码中它变得可见。
答案 4 :(得分:1)
对于Api 21或更高版本有一个称为translateZ
的xml属性,可让您在视图上定义高程级别。
你也可以使用它。
机器人:translateZ =" 30DP"
* API> = 21