我想在Android中定义RelativeLayout的视图的z顺序。

我知道其中一个方法就是打电话给bringToFront。

有更好的方法吗?这将是伟大的,如果我可以在布局xml定义z顺序。


当前回答

检查在XML中的某个视图上是否有任何提升。如果是,请向其他项目添加标高或删除标高以解决问题。从这里开始,是视图的顺序决定了什么在其他视图之上。

其他回答

你可以使用重定义的自定义RelativeLayout

getChildDrawingOrder (int childCount, int i)

注意-这个方法将参数i作为“我应该在哪个视图中绘制i”。 这就是ViewPager的工作原理。它与PageTransformer一起设置自定义绘制顺序。

我遇到了同样的问题:在一个相对布局parentView中,我有两个孩子childView1和childView2。首先,我把childView1放在childView2上面,我想让childView1在childView2上面。改变孩子们观点的顺序并没有解决我的问题。对我有用的是在parentView上设置android:clipChildren="false",在我设置的代码中:

childView1.bringToFront();

parentView.invalidate();

API 21内置了view.setElevation(float)

使用ViewCompat。setElevation(视图中,浮动);为了向后兼容

更多方法ViewCompat。setZ(v,像素)和ViewCompat。setTranslationZ (v,像素)

另一种方法是收集按钮或视图数组,并使用addView添加到RelativeLayout

如果你想在代码中这样做 你可以这样做

View.bringToFront();

看文档

请注意,API 21及更高版本中的按钮和其他元素都有很高的高度,因此忽略元素的xml顺序,而不管父布局如何。我花了好长时间才想明白。