相对布局:如果涉及边距,则无法在引用视图上方分配视图
Posted
技术标签:
【中文标题】相对布局:如果涉及边距,则无法在引用视图上方分配视图【英文标题】:RelativeLayout: Can't assign a view above a referenced view if margin is involved 【发布时间】:2011-11-02 20:58:15 【问题描述】:我试图将 TextView dependent
放在相对布局内的另一个 TextView anchor
上方,但我无法使 dependent
显示出来。
情况:anchor
将与父级的顶部对齐 + 一些 marginTop 以使其更靠近父级的中心(RelativeLayout),dependent
将对齐到此 @987654326 的上方@。
这不起作用;当我将它分配到anchor
上方时,似乎android 假定anchor
的顶部是父级的顶部,并将dependent
绘制在屏幕外(在其上方)。
这不应该是这种情况,因为我使用 margin 而不是 padding 所以RelativeLayout 顶部和anchor
之间的区域不应该是部分anchor
本身(我用层次结构查看器检查了大小)。或者也许我弄错了? :S
这是简单的布局代码:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
>
<TextView android:id="@+id/anchor"
android:layout_
android:layout_
android:layout_alignParentTop="true"
android:layout_marginTop="100px"
android:text="Anchor point."
/>
<TextView android:id="@+id/dependent"
android:layout_
android:layout_
android:layout_above="@id/anchor"
android:text="Dependent."
/>
</RelativeLayout>
期望:
------------- | | |依赖 | |锚 | | | -------------发生了什么:
依赖(屏幕外显示) ------------- | | | | |锚 | | | -------------希望: 有人可以在这里帮助我吗?或者也许帮助指出我是否犯了错误。我需要在我的实际实现中使用RelativeLayout(上面只是一个例子)。
提前致谢。
【问题讨论】:
你有想过这个吗?我遇到了同样的问题 对不起,我没有注意到你的评论。不,我不知道这里出了什么问题。最后,我使用空视图作为填充物来替换锚点的边距。 是的,我最终从另一个视图的底部边缘化 【参考方案1】:我制作了一个不可见的按钮来对齐 - 这就是您要找的东西吗?如果您更改锚按钮的边距或任何位置参数,它将更改依赖项的位置。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_>
<Button android:id="@+id/anchorbutton"
android:layout_
android:layout_
android:layout_margin="100dp"
android:visibility="invisible"
/>
<TextView android:id="@+id/anchor"
android:layout_
android:layout_
android:layout_below="@id/anchorbutton"
android:layout_alignLeft="@id/anchorbutton"
android:layout_margin="10dp"
android:text="Off Anchor button"
/>
<TextView android:id="@+id/dependent"
android:layout_
android:layout_
android:layout_alignLeft="@id/anchorbutton"
android:layout_below="@id/anchor"
android:layout_margin="50dp"
android:text="Dependent."
【讨论】:
【参考方案2】:我能问一下你为什么不在最上角(顶部或底部 - 没关系)制作锚点,然后从中构建你的视图?这就是我所做的,如下所示:抱歉 - 我还不能发布照片。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_>
<TextView android:id="@+id/anchor"
android:layout_
android:layout_
android:layout_alignParentTop="true"
android:layout_marginTop="100dp"
android:text="Anchor point."
/>
<TextView android:id="@+id/dependent"
android:layout_
android:layout_
android:layout_below="@id/anchor"
android:layout_alignLeft="@id/anchor"
android:text="Dependent."
/>
</RelativeLayout>
或者,如果你真的想保持原样,只需将依赖的对齐方式更改为 android:layout_alignParentTop="true"。您也可以在此处设置边距以影响其位置。这是代码和图片。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_ >
<TextView android:id="@+id/anchor"
android:layout_
android:layout_
android:layout_alignParentTop="true"
android:layout_marginTop="100dp"
android:text="Anchor point."
/>
<TextView android:id="@+id/dependent"
android:layout_
android:layout_
android:layout_alignParentTop="true"
android:layout_marginTop="150dp"
android:text="Dependent."
/>
</RelativeLayout>
【讨论】:
使用父级的顶部或底部作为锚点不是我想要的。假设我们正在制作一个类似 facebook 的评论,其中用户名是 Dependent,评论是 Content,当有布局对齐时,我不想更改我拥有的每个视图的边距。只有锚和其他人应该跟随.. 顺便说一句,除了 layout_below 和 layout_alignLeft 之外,我看不出你的代码和我的代码有什么区别。他们应该给出与我相同的结果,只是略有不同。 在上面的代码中没有任何东西从屏幕上消失。依赖迷路没有问题。我不关注您的评论“假设我们正在制作类似 facebook 的评论,其中用户名为 Dependent,评论为 Content,当有布局对齐时,我不想更改我拥有的每个视图的边距. 只有锚和其他人应该跟随。” 请参阅下面关于创建锚按钮的答案。当按钮移动时,所有与按钮对齐的东西都会移动以上是关于相对布局:如果涉及边距,则无法在引用视图上方分配视图的主要内容,如果未能解决你的问题,请参考以下文章