hpi*_*que 219 android z-order android-relativelayout
我想在Android中定义RelativeLayout视图的z顺序.
我知道这样做的一种方法是打电话bringToFront.
有更好的方法吗?如果我可以在布局xml中定义z顺序会很棒.
Ste*_*ley 306
最简单的方法是简单地关注视图添加到XML文件的顺序.文件中的下降意味着在Z轴上向上.
编辑:这是记录在这里,并在这里对Android开发者网站.(谢谢@flightplanner)
QAM*_*MAR 85
如果你想在代码中执行此操作,则可以执行此操作
View.bringToFront();
Run Code Online (Sandbox Code Playgroud)
看文档
Dan*_*son 62
请注意,API 21及更高版本中的按钮和其他元素具有较高的高程,因此无论父布局如何,都会忽略元素的xml顺序.我花了一段时间才想出那一个.
lej*_*onl 18
在从API级别21开始的Android中,布局文件中的项目从它们在文件中的排序方式得到它们的Z顺序,如正确答案中所述,并且从它们的高程,更高的高程值意味着该项目获得更高的Z顺序.
这有时会导致问题,特别是经常出现的项目,根据XML的顺序应该是低于他们在Z顺序的顶部按钮.要解决此问题,只需设置android:elevation布局XML中的项目以匹配您要实现的Z顺序.
我在布局中设置了一个元素的高程,它将开始投射阴影.如果您不想要此效果,可以使用如下代码删除阴影:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
myView.setOutlineProvider(null);
}
Run Code Online (Sandbox Code Playgroud)
我没有找到任何方法通过布局xml删除高架视图的阴影.
Ton*_* Vu 14
我遇到了同样的问题:在相对布局parentView中,我有2个子childView1和childView2.首先,我将childView1放在childView2之上,我希望childView1位于childView2之上.改变儿童观点的顺序并没有为我解决问题.对我有用的是在parentView和我设置的代码中设置android:clipChildren ="false":
childView1.bringToFront();
parentView.invalidate();
Run Code Online (Sandbox Code Playgroud)
The*_*tle 11
以为我会在引入之后添加一个答案
机器人:translationZ
XML领域改变了一点点.其他答案表明正在运行
childView1.bringToFront();
parentView.invalidate();
Run Code Online (Sandbox Code Playgroud)
因为这段代码不会将带有硬编码的android:translationZ的任何视图前面的childView1带到XML文件中.我遇到了这个问题,一旦我从其他视图中删除了这个字段,bringToFront()工作得很好.
childView.bringToFront() 对我不起作用,所以我将最近最少添加的项目(覆盖所有其他孩子的项目)的 Z 转换设置为负值,如下所示:
lastView.setTranslationZ(-10);
有关更多信息,请参阅https://developer.android.com/reference/android/view/View.html#setTranslationZ(float)
API 21具有view.setElevation(float)内置功能
使用ViewCompat.setElevation(view, float);的向后兼容性
更多方法ViewCompat.setZ(v, pixels)和ViewCompat.setTranslationZ(v, pixels)
另一种方法是收集按钮或查看数组并用于addView添加到RelativeLayout
| 归档时间: |
|
| 查看次数: |
147874 次 |
| 最近记录: |