Подтвердить что ты не робот

Поля LinearLayout, RelativeLayout и т.д. Работают не так, как ожидалось

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

Например,

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

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

Обходным решением будет использование силы тяжести, но это работает только с равными полями.

Кстати, есть аналогичный вопрос размещенный здесь, но на него не ответил.

4b9b3361

Ответ 1

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

Ответ 2

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

Поля управляются родительским макетом, поэтому в этом случае основной FrameLayout. Я не знаю, является ли это признаком или ошибкой, но как этот макет интерпретирует поля.

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

Ответ 3

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

<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>