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

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

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


当前回答

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

其他回答

最简单的方法就是注意视图添加到XML文件中的顺序。文件的下方意味着z轴的上方。

编辑: 在这里和这里的Android开发者网站上都有记录。(感谢@flightplanner)

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

View.bringToFront();

看文档

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

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

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

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

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

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

API 21内置了view.setElevation(float)

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

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

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