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

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

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


当前回答

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

其他回答

请注意,你可以从API级别21开始使用view.setZ(float)。在这里你可以找到更多信息。

在API级别21开始的Android中,布局文件中的项目的Z顺序来自于它们在文件中的顺序,如正确答案所述,以及它们的仰角,仰角值越高意味着项目的Z顺序越高。

这有时会导致问题,特别是对于经常出现在项顶部的按钮,而根据XML的顺序,这些按钮应该在它们下面以Z顺序排列。要解决这个问题,只需在布局XML中设置android:项目的提升,以匹配你想要实现的Z顺序。

如果你在布局中设置一个元素的立面,它就会开始投射阴影。如果你不想要这种效果,你可以用如下代码删除阴影:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
   myView.setOutlineProvider(null);
}

我还没有找到任何方法来删除通过布局xml提升视图的阴影。

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

childView1.bringToFront();

parentView.invalidate();

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

View.bringToFront();

看文档

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