我想定义Android中Relativelayout视图的Z顺序。

我知道这样做的一种方法是打电话 bringToFront.

有更好的方法吗?如果我可以在布局XML中定义z顺序,那就太好了。

有帮助吗?

解决方案

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

编辑:这是记录的 这里这里 在Android开发人员网站上。 (谢谢@flightplanner)

其他提示

如果您想在代码中执行此操作

View.bringToFront();

文档

请注意,API 21及更大的按钮和其他元素具有很高的高度,因此无论父母布局如何,都忽略XML元素顺序。花了我一段时间来弄清楚那个。

在从API级别开始的Android中,布局文件中的项目从正确的答案中所述,从文件中订购的方式以及从其高程中获取Z订单,更高的高程值表示该项目获得了更高的Z订单。

有时可能会引起问题,尤其是在按钮上通常出现在按照XML顺序的项目上,应按z顺序下方。要解决此问题,只是设置 android:elevation 布局XML中的项目以匹配您要实现的Z顺序。

我在布局中设置了一个元素的高程,它将开始投射阴影。如果您不希望这种效果,则可以使用类似的代码删除阴影:

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

我没有找到任何方法可以通过布局XML删除高架视图的阴影。

我遇到了同样的问题:在相对布局的parentview中,我有2个孩子childview1和childview2。首先,我将ChildView1放在ChildView2上方,我希望ChildView1成为ChildView2的顶部。改变儿童观点的顺序并不能解决我的问题。对我有用的是设置 Android:clipchildren =“ false” 在ParentView和我设置的代码中:

childView1.bringToFront();

parentView.invalidate();

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

以为我会添加一个答案以来

Android:Translationz

XML字段改变了一点点。暗示运行的其他答案

childView1.bringToFront();

parentView.invalidate();

除了该代码不会在XML文件中使用硬编码的Android:Translationz的任何视图前,都不会将ChildView1带到任何视图前。我对此有问题,一旦我从其他视图中删除了该字段,Bringtofront()工作就很好。

API 21具有 view.setElevation(float) 建造

利用 ViewCompat.setElevation(view, float); 用于向后兼容性

更多方法 ViewCompat.setZ(v, pixels)ViewCompat.setTranslationZ(v, pixels)

另一种方式收集按钮或查看数组并使用 addView 添加到Relativelayout

childview.bringtofront()对我不起作用,因此我将最近添加的物品(将所有其他孩子叠加的物品(将所有其他孩子叠加的物品)设置为负值,将其设置为一个负值:

lastView.setTranslationZ(-10);

https://developer.android.com/reference/android/view/view.html#settranslationz(float) 更多

您可以使用自定义 RelativeLayout 重新定义

protected int getChildDrawingOrder (int childCount, int i)

请注意 - 此方法采用参数 i 如“我应该绘制哪种视图 i'th“。这就是方式 ViewPager 作品。它与 PageTransformer.

检查XML中的一个视图是否有任何高程。如果是这样,请将高程添加到另一个项目或删除高程以解决问题。从那里开始,观点的顺序决定了另一个上方的内容。

或将重叠按钮或视图放入Framelayout中。然后,XML文件中的Relativelayout将尊重儿童布局的顺序。

您也可以使用以下代码示例来实现相同的

ViewCompat.setElevation(sourceView, ViewCompat.getElevation(mCardView)+1);

这是向后兼容的。这里 mCardView 是应该在下面的视图 sourceView.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top