android 按钮改变顺序,在Android中定义RelativeLayout的Z视图顺序

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

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

我知道这样做的一种方法是拨打bringToFront。

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

11个解决方案

288 votes

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

编辑:这在此处和Android开发人员站点上都有记录。 (谢谢@flightplanner)

Steve Haley answered 2019-03-15T07:21:04Z

83 votes

如果你想在代码中这样做你可以做

View.bringToFront();

看文档

QAMAR answered 2019-03-15T07:21:31Z

51 votes

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

Daniel Wilson answered 2019-03-15T07:21:58Z

13 votes

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

childView1.bringToFront();

parentView.invalidate();

Tony Vu answered 2019-03-15T07:22:25Z

12 votes

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

Vadim Kotov answered 2019-03-15T07:22:50Z

12 votes

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

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

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

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {

myView.setOutlineProvider(null);

}

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

lejonl answered 2019-03-15T07:23:39Z

9 votes

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

机器人:translationZ

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

childView1.bringToFront();

parentView.invalidate();

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

ThePartyTurtle answered 2019-03-15T07:24:25Z

3 votes

childView.bringToFront()对我不起作用,所以我将最近添加的项目(覆盖所有其他子项的项目)的Z转换设置为负值,如下所示:

lastView.setTranslationZ(-10);

请参阅[https://developer.android.com/reference/android/view/View.html#setTranslationZ(float)]了解更多信息

kip2 answered 2019-03-15T07:25:05Z

3 votes

API 21具有ViewCompat.setZ(v, pixels)内置版本

使用ViewCompat.setZ(v, pixels)以实现向后兼容性

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

另一种方法是收集按钮或查看数组并在最后添加它

Qamar answered 2019-03-15T07:25:53Z

1 votes

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

i

请注意 - 此方法将param i视为“我应该绘制哪个视图i'th”。这是ViewPager的工作原理。 它与PageTransformer一起设置自定义绘图顺序。

Petrov Dmitrii answered 2019-03-15T07:26:37Z

0 votes

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

The Fluffy T Rex answered 2019-03-15T07:27:04Z

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值