Answers:
在Android中,从API级别21开始,布局文件中的项目从其在文件中的排序方式(如正确答案所述)获得其Z顺序,并且从其标高中获得更高的标高值,这意味着其标高获得更高的Z顺序。
有时这可能会引起问题,尤其是按钮经常出现在项目顶部时,根据XML的顺序,这些按钮应按Z顺序位于其下方。要解决此问题,只需将android:elevation
布局XML中的项目设置为与要实现的Z顺序匹配即可。
我在布局中设置了一个元素的高程,它将开始投射阴影。如果您不想要这种效果,可以使用如下代码删除阴影:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
myView.setOutlineProvider(null);
}
我还没有找到通过布局xml删除高架视图阴影的任何方法。
android:elevation="1000dp"
。这样就不会渲染阴影。
我遇到了相同的问题:在相对布局parentView中,我有2个孩子childView1和childView2。首先,我将childView1放在childView2上方,并希望childView1位于childView2的顶部。更改儿童视图的顺序并不能解决我的问题。对我有用的是在parentView和我设置的代码中设置android:clipChildren =“ false”:
childView1.bringToFront();
parentView.invalidate();
child.bringToFront()
与parent.invalidate()
作品,但parent.bringChildToFront(child)
没有。我们都期望操作系统的逻辑在哪里?
android:clipChildren="false"
做到了。谢谢!
请注意,您可以view.setZ(float)
从API级别21开始使用。在这里,您可以找到更多信息。
childView.bringToFront()对我不起作用,因此我将最近添加的最小项(覆盖所有其他子项的那个)的Z转换设置为负值,如下所示:
lastView.setTranslationZ(-10);
有关更多信息,请参见https://developer.android.com/reference/android/view/View.html#setTranslationZ(float)
您可以将custom RelativeLayout
与redefined一起使用
protected int getChildDrawingOrder (int childCount, int i)
请注意,此方法将param i
作为“我应该绘制哪个视图i'th
”。这是如何ViewPager
工作的。结合设置自定义绘图顺序PageTransformer
。