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

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

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


当前回答

childView.bringToFront()对我来说不起作用,所以我设置了最近添加的项目(覆盖所有其他孩子的项目)的Z翻译为负值,如下所示:

lastView.setTranslationZ(-10);

详见https://developer.android.com/reference/android/view/View.html#setTranslationZ(float)

其他回答

我想我应该加上一个答案,因为介绍了

android: translationZ

XML字段稍微改变了一点。其他答案建议你跑步

childView1.bringToFront();

parentView.invalidate();

除了这段代码不会把childView1在任何视图前硬编码的android:translationZ在XML文件中。我遇到了这个问题,一旦我从其他视图中删除了这个字段,bringToFront()工作得很好。

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

getChildDrawingOrder (int childCount, int i)

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

或者把重叠的按钮或视图放在一个框架布局中。然后,xml文件中的RelativeLayout将尊重添加的子布局的顺序。

childView.bringToFront()对我来说不起作用,所以我设置了最近添加的项目(覆盖所有其他孩子的项目)的Z翻译为负值,如下所示:

lastView.setTranslationZ(-10);

详见https://developer.android.com/reference/android/view/View.html#setTranslationZ(float)

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