LinearLayout,RelativeLayout等边距不能按预期工作

时间:2011-03-23 23:14:06

标签: android margin android-linearlayout

组布局中的边距似乎不起作用。

例如,

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_margin="40dip"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="I'm a button" />

</LinearLayout>

应显示一个四边有40p边距的按钮。但是,它在右侧和底部有80p的边距。

我做错了吗? 这是一个错误吗?

解决方法是使用重力,但这仅适用于边距。

顺便说一下,有一个类似的问题posted here,但尚未得到答复。

4 个答案:

答案 0 :(得分:21)

LinearLayout上的

android:padding="40dp"或按钮上的android:layout_margin="40dp"将为您提供所需的效果。填充定义了视图边缘与其内容之间的空间,布局边距定义了视图两侧的额外空间。

答案 1 :(得分:12)

问题实际上是FrameLayout解释边距的方式。 setContentView()将您的“主”布局附加到FrameLayout,这是视图层次结构的实际根(您可以通过层次结构查看器查看)并通过电话提供给您。

边距由父布局管理,因此在本例中为主FrameLayout。我不知道这是一个功能还是一个bug,但这就是这个布局如何解释边距。

很好,我在输入时已经发布了解决方案:改为使用填充。

答案 2 :(得分:6)

如果您需要为布局设置边距,只需使用其他线性或相对布局

进行包装即可
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">

  <LinearLayout android:layout_margin="40dip"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button android:id="@+id/button"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:text="I'm a button" />

  </LinearLayout>

</LinearLayout>

答案 3 :(得分:0)

将线性布局与其他布局包裹在一起是最好的策略。