当前位置:  开发笔记 > 编程语言 > 正文

在Android中定义RelativeLayout的Z视图顺序

如何解决《在Android中定义RelativeLayout的Z视图顺序》经验,为你挑选了8个好方法。

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

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

有更好的方法吗?如果我可以在布局xml中定义z顺序会很棒.



1> Steve Haley..:

最简单的方法是简单地关注视图添加到XML文件的顺序.文件中的下降意味着在Z轴上向上.

编辑:这是记录在这里,并在这里对Android开发者网站.(谢谢@flightplanner)


Casebash,我不认为必须使用"@ + id/your_element_before_its_defined",然后在稍后定义的元素中使用相同的id.我可能错了,这些布局对我来说非常棘手,但我肯定会觉得它有效.
遗憾的是,这并不总是可以改变.例如,在相对布局中,每个元素只能相对于先前在文件中定义的元素进行布局
我知道我已经晚了大约3年了,但是在回答@hpique的时候,这里有记录[这里](http://developer.android.com/reference/android/view/View.html#Drawing)
tjb是对的(我很高兴他是).首先使用@ + id和id,例如layout_above ="@ + id/some_id"
您还可以将放入值xml文件中,然后可以在任何地方引用它.
@Snake C将位于前面/顶部,假设在实际文件中您按照A,B,C的顺序定义视图.请记住,文件中的下方意味着随后在Z轴上方增加.

2> QAMAR..:

如果你想在代码中执行此操作,则可以执行此操作

View.bringToFront();

看文档



3> Daniel Wilso..:

请注意,API 21及更高版本中的按钮和其他元素具有较高的高程,因此无论父布局如何,都会忽略元素的xml顺序.我花了一段时间才想出那一个.


我的这个错误的解决方案是在我希望通过按钮呈现的视图上调用setElevation(1000).

4> lejonl..:

在从API级别21开始的Android中,布局文件中的项目从它们在文件中的排序方式得到它们的Z顺序,如正确答案中所述,并且从它们的高程,更高的高程值意味着该项目获得更高的Z顺序.

这有时会导致问题,特别是经常出现的项目,根据XML的顺序应该是低于他们在Z顺序的顶部按钮.要解决此问题,只需设置android:elevation布局XML中的项目以匹配您要实现的Z顺序.

我在布局中设置了一个元素的高程,它将开始投射阴影.如果您不想要此效果,可以使用如下代码删除阴影:

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

我没有找到任何方法通过布局xml删除高架视图的阴影.



5> Tony Vu..:

我遇到了同样的问题:在相对布局parentView中,我有2个子childView1和childView2.首先,我将childView1放在childView2之上,我希望childView1位于childView2之上.改变儿童观点的顺序并没有为我解决问题.对我有用的是在parentView和我设置的代码中设置android:clipChildren ="false":

childView1.bringToFront();

parentView.invalidate();


这很有效,Android让我很难过.`child.bringToFront()`与`parent.invalidate()`有效,但`parent.bringChildToFront(child)`没有.我们都期望从操作系统的逻辑在哪里?

6> Vadim Kotov..:

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



7> ThePartyTurt..:

以为我会在引入之后添加一个答案

机器人:translationZ

XML领域改变了一点点.其他答案表明正在运行

childView1.bringToFront();

parentView.invalidate();

因为这段代码不会将带有硬编码的android:translationZ的任何视图前面的childView1带到XML文件中.我遇到了这个问题,一旦我从其他视图中删除了这个字段,bringToFront()工作得很好.



8> Qamar..:

API 21具有view.setElevation(float)内置功能

使用ViewCompat.setElevation(view, float);的向后兼容性

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

另一种方法是收集按钮或查看数组并用于addView添加到RelativeLayout

推荐阅读
pan2502851807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有