相对布局:如果涉及边距,则无法在引用视图上方分配视图

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,当有布局对齐时,我不想更改我拥有的每个视图的边距. 只有锚和其他人应该跟随。” 请参阅下面关于创建锚按钮的答案。当按钮移动时,所有与按钮对齐的东西都会移动

以上是关于相对布局:如果涉及边距,则无法在引用视图上方分配视图的主要内容,如果未能解决你的问题,请参考以下文章

具有百分比高度和宽度的相对布局

自动布局 - 如何分配内容以按比例填充屏幕[重复]

负边距与相对定位

如何为约束布局组提供垂直边距?

盒子模型和布局

Android 相对布局RelativeLayout的基础