我想定义Android中RelativeLayout视图的z顺序。在Android中定义RelativeLayout视图的Z顺序
我知道这样做的一种方法是拨打bringToFront
。
是否有更好的方法来做到这一点?如果我可以在布局xml中定义z顺序,那将是非常好的。
我想定义Android中RelativeLayout视图的z顺序。在Android中定义RelativeLayout视图的Z顺序
我知道这样做的一种方法是拨打bringToFront
。
是否有更好的方法来做到这一点?如果我可以在布局xml中定义z顺序,那将是非常好的。
我遇到了同样的问题:在一个相对布局parentView,我有2个孩子childView1和childView2。起初,我把childView1放在childView2的上面,我想让childView1放在childView2的上面。改变儿童观点的顺序并不能解决我的问题。什么工作对我来说是设置机器人:clipChildren =上parentView和代码“假”我设置:
childView1.bringToFront();
parentView.invalidate();
这是工作,Android让我很伤心。 ''child.bringToFront()'用'parent.invalidate()'工作,但'parent.bringChildToFront(child)'不。我们都期望从操作系统中获得什么逻辑? – 2015-05-06 15:21:43
在'LinearLayout'中弄乱了孩子们的订单... – 2015-07-10 12:05:10
请注意,您可以使用view.setZ(float)
从API级别开始21 Here你可以找到更多信息。
setz在API级别21以下不可用。并bringtoFront()有闪烁的问题。任何想法实现相同? – 2016-02-15 10:50:47
想我会添加一个答案,因为引进了
的android:translationZ
XML领域变化的东西一点点。在XML文件中translationZ:该建议运行
childView1.bringToFront();
parentView.invalidate();
其他的答案是完全当场就除了这个代码不会带来childView1在任何视图中的正面配有一块硬编码的机器人。我遇到了这个问题,一旦我从其他视图中删除了这个字段,bringToFront()就工作得很好。
这对于android 5的“海拔”也是如此。 – shelll 2015-08-20 16:43:53
可以使用自定义RelativeLayout
与重新定义
protected int getChildDrawingOrder (int childCount, int i)
注意 - 此方法需要PARAM i
作为 “这观点我应该吸取i'th
”。 这是ViewPager
的工作原理。它与PageTransformer
一起设置自定义绘图顺序。
childView。bringToFront()并没有为我工作,所以我设置了至少最近添加的项目(这就是一个覆盖所有其他子女)为负值,像这样的Z翻译:
lastView.setTranslationZ(-10);
看到https://developer.android.com/reference/android/view/View.html#setTranslationZ(float)更多
在Android中从API级别21开始,在布局文件中的项目得到他们是如何在文件中有序,在正确答案描述,并从他们抬高他们的Z顺序都,海拔较高值意味着物品得到更高的Z顺序。
这有时会引起问题,特别是经常出现在项根据XML的顺序应低于它们的Z次序的顶部的按钮。要解决这个问题,只需将布局XML中项目的android:elevation
设置为与要实现的Z顺序相匹配即可。
我你设置布局元素的高度将开始蒙上了一层阴影。如果你不想要这个效果,你可以用代码中删除的影子,像这样:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
myView.setOutlineProvider(null);
}
我还没有发现任何方式,通过布局文件删除正视图的影子。
请注意,在API按钮和其他元件21和更大的具有高海拔,因此忽略元素的XML顺序考虑父布局。花了我一段时间来弄清楚这一点。
是的,它确实如此。花了我几个小时才意识到它.. – aldok 2017-01-20 22:25:31
对于我来说,这个错误的解决方案是在我想在按钮上呈现的视图上调用setElevation(1000)。 – Shaegorath 2017-05-22 16:23:10
谢谢。在阅读您的答案之前,我摸了一下头,然后理解为什么在稍后添加的广告视图上方显示一个按钮。 – Hong 2017-10-19 21:40:40
API 21具有view.setElevation(float)
内建
使用ViewCompat.setElevation(view, float);
为了向后兼容
更多方法ViewCompat.setZ(v, pixels)
和ViewCompat.setTranslationZ(v, pixels)
花药方式收集按钮或视图阵列并在结束
查看添加它.bringToFront();是anser – 2016-06-22 10:24:59