Android layout_margin与RelativeLayout属性冲突

时间:2012-05-16 21:43:38

标签: android android-layout relativelayout

首先,图片(来自hierarchyviewer):

Good and bad buttons

我有两个不同长度的文本按钮,我希望它们的大小相同。在图像中,您可以看到它在顶部工作。但是,我想在我的按钮之间留出一些空间,所以对于第三个和第四个按钮,我添加了layout_margin属性以给它们一点空间。随之而来的是混乱。第四个按钮保持相同的大小并添加适当的边距。但是第三个按钮似乎没有在右边添加边距,因此会失去宽度。

我认为正在发生的事情是在对齐之后应用了保证金......所以实际上,我无法想出一个完全解释它的过程。

我想要的是:

  • 要理解这些东西是如何工作的 - 视图的布局似乎如此 对我来说不直观,我无法想象达到我不是的地步 随机更改属性以修复此类问题。是 有一个全面的教程可以解决这个问题吗?

  • 两个相等长度的按钮,相对长度文本不同 有保证金的布局。我需要相对布局来安排所有 关于活动的其他观点。

代码如下。

<?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    >
    <Button
        android:id="@+id/goodThis"
        android:text="Short text"
        android:background="@drawable/button_red" 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"

        android:layout_alignParentLeft="true"
        android:layout_alignRight="@+id/goodThat"
    />
    <Button
        android:id="@+id/goodThat"
        android:text="Longer text"
        android:background="@drawable/button_green" 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"

        android:layout_alignParentLeft="true"
        android:layout_below="@+id/goodThis"
    />

    <Button
        android:id="@+id/badThis"
        android:text="Short text"
        android:background="@drawable/button_red" 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"

        android:layout_below="@+id/goodThat"
        android:layout_alignParentLeft="true"
        android:layout_alignRight="@+id/badThat"
        android:layout_margin="3dp"
    />
    <Button
        android:id="@+id/badThat"
        android:text="Longer text"
        android:background="@drawable/button_green" 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"

        android:layout_alignParentLeft="true"
        android:layout_below="@+id/badThis"
        android:layout_margin="3dp"
    />
</RelativeLayout>

1 个答案:

答案 0 :(得分:3)

为了让我的回答更多地作为答案,而不是上面的评论,我通过RelativeLayout体验了解了以下内容:

1)消除转发ID引用。这可能会让你更难以弄清楚如何去做,但是你可以看到解析这样的引用需要在运行时至少两次通过布局规范并且可能使事情变得复杂。

2)我通常使用特定的margin / padding属性,例如layout_marginTop等,以获得更好的结果。你使用毯子“layout_margin”会使第3和第4个按钮稍微向右偏移,这可能不是你想要的外观。尝试仅使用marginTop来分隔按钮。