Поля 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 справа и снизу.
Я что-то делаю неправильно?
Это ошибка?
Обходным решением будет использование силы тяжести, но это работает только с равными полями.
Кстати, есть аналогичный вопрос размещенный здесь, но на него не ответил.
Ответы
Ответ 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>