Поля LinearLayout, RelativeLayout и т. Д. Не работают должным образом - PullRequest
22 голосов
/ 24 марта 2011

Поля в групповых раскладках не работают.

Например,

<?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 справа и снизу.

Я что-то не так делаю? Это ошибка?

Обходной путь - использовать гравитацию, но это работает только с ровными полями.

Кстати, есть похожий вопрос , опубликованный здесь , но он не получил ответа.

Ответы [ 4 ]

22 голосов
/ 24 марта 2011

android:padding="40dp" на LinearLayout или android:layout_margin="40dp" на кнопке даст вам нужный эффект.Отступы определяют пространство между краями вида и его содержимым, поле макета определяет дополнительное пространство по сторонам вида.

12 голосов
/ 24 марта 2011

Проблема в том, как FrameLayout интерпретирует поля.setContentView() присоединяет ваш «основной» макет к FrameLayout, который является фактическим корнем иерархии представления (вы можете видеть это с помощью средства просмотра иерархии) и предлагается вам по телефону.управляется родительским макетом, поэтому в этом случае основной FrameLayout.Я не знаю, является ли это функцией или ошибкой, но вот как этот макет интерпретирует поля.

Итак, решение уже было опубликовано, пока я печатал: вместо этого используйте padding.

6 голосов
/ 24 августа 2011

если вам нужно установить поле для макета, просто оберните его другим линейным или относительным макетом

<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>
0 голосов
/ 17 марта 2019

Обертывание линейного макета другим макетом - лучшая стратегия.

...