Равномерно разнесенная кнопка в макете
Я пытаюсь сделать 4 кнопки, равномерно расположенных в портретном режиме на Android.
Пространство должно масштабироваться вверх и вниз в зависимости от размера экрана, с равным количеством пробелов между каждой кнопкой и границами.
Я пробовал использовать линейную компоновку, вес и плотность макета, но кажется, что я не могу центрировать кнопку по вертикали.
Является ли это ошибкой в планировании Android? Скорее всего, это только я.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_weight="1"
android:layout_gravity="center"
>
<Button
android:id="@+id/btn_f"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="btn_f"
>
</Button>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_weight="1"
android:layout_gravity="center"
>
<Button
android:id="@+id/btn_b"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="btn_b"
>
</Button>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_weight="1"
android:layout_gravity="center"
>
<Button
android:id="@+id/btn_a"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="btn_a"
>
</Button>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_weight="1"
android:layout_gravity="center"
>
<Button
android:id="@+id/settings"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Settings"
>
</Button>
</LinearLayout>
</LinearLayout>
Ответы
Ответ 1
Попробуйте что-то вроде этого:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="0dp"
android:orientation="vertical"
android:layout_weight="1"
android:gravity="center"
>
<Button
android:id="@+id/btn_f"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="btn_f"
/>
</LinearLayout>
<!-- etc -->
</LinearLayout>
Изменения в исходном макете состоят в том, что каждая внутренняя LinearLayout
имеет высоту нуля и гравитацию (не layout_gravity) центра. Это должно привести к тому, что все внутренние линейные макеты будут иметь одинаковую высоту, равномерно разбивая родительскую высоту, не растягивая сами кнопки.
Ответ 2
Попробуйте следующее:
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="0dp"
android:orientation="horizontal"
android:weightSum="1"
android:gravity="center">
<Button
android:id="@+id/btn_f"
android:layout_width="0dp"
android:layout_weight="0.5"
android:layout_height="wrap_content"
android:text="btn_f" />
</LinearLayout>
Это приведет к тому, что кнопка займет только половину длины экранов.
Ответ 3
Кажется, вы обертываете все кнопки в другом LinearLayout
, а не просто сохраняете их в родительском LinearLayout
.
Удалите все эти немедленные LinearLayout
, чтобы эффект android:layout_weight
вступил в силу.
Чтобы достичь растяжения и расстояния
- используйте
android:layout_width="fill_parent"
в самих кнопках
- указать границу для интервала