Почему правая кнопка не может справа от родителя, как левая кнопка слева от родителя
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left"
android:text="left" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="center" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
android:text="right" />
</LinearLayout>
Я знаю, что могу также использовать Relativelayout и установить alignparentRight=true, чтобы позволить правой кнопке справа от этого родителя, но я просто хочу знать, если я использую LinearLayout, как я могу сделать правую кнопку справа от нее родитель? любая помощь спасибо
5 ответов
Если у вас есть только три или два ребенка, вы можете использовать FrameLayout
вместо LinearLayout
, Но если вы хотите использовать LinearLayout
делай так
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="left" />
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="center" />
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="right" />
</LinearLayout>
Используя FrameLayout
как родитель
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left|center_vertical"
android:text="left" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="center" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right|center_vertical"
android:text="right" />
</FrameLayout>
Зачем layout_gravity="right"
не работает для горизонтального LinearLayout, объясненного здесь
Для горизонтального линейного макета имеют смысл следующие значения:
- Топ
- центр
- низ
Это связано с тем, что дочерние элементы горизонтальной линейной компоновки располагаются горизонтально один за другим. С помощью android можно контролировать только одно:layout_gravity - это то, как дочернее представление располагается вертикально.
Для вертикальной линейной компоновки имеют смысл следующие значения:
- оставил
- центр
- право
Это связано с тем, что дочерние элементы вертикальной линейной компоновки располагаются вертикально один под другим. С помощью android можно управлять только одним:layout_gravity - это то, как дочернее представление располагается горизонтально.
Еще один способ сделать это, если вы не хотите, чтобы потенциальная причина FrameLayout
или же RelativeLayout
и до сих пор хочу использовать wrap_content
ширина, которую вы не можете, если вы правильно выровняете RelativeLayout
чтобы избежать дублирования:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal" >
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="left" />
<View
android:layout_width="0dp"
android:layout_height="1dp"
android:layout_weight="1" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="center" />
<View
android:layout_width="0dp"
android:layout_height="1dp"
android:layout_weight="1" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="right" />
</LinearLayout>
Этот метод довольно распространен и используется (по крайней мере, в прошлый раз, когда я проверял его) AlertDialog
в приложении app lib
Использование
Relative layout instead of
linear layout.
и используйте layout_alignParentRight, чтобы сделать его справа от родителя.
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:text="left" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="center" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:text="right" />
</RelativeLayout>
Почему бы не использовать веса,
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:weightSum="100" >
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:gravity="left"
android:layout_weight="33"
android:orientation="vertical" >
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="left" />
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:gravity="center"
android:layout_weight="34"
android:orientation="vertical" >
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="center" />
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="33"
android:gravity="right"
android:orientation="vertical" >
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="right" />
</LinearLayout>
</LinearLayout>
И если у вас есть две кнопки
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:weightSum="100" >
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:gravity="left"
android:layout_weight="50"
android:orientation="vertical" >
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="left" />
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="50"
android:gravity="right"
android:orientation="vertical" >
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="right" />
</LinearLayout>
</LinearLayout>
Примечание. Реализация этого способа требует добавления множества макетов и приведет к проблемам, когда приложение будет довольно тяжелым. Всегда рекомендуется использовать Относительный макет.
Поместите центральную кнопку в RelativeLayout с весом 1, чтобы расположение центра занимало всю площадь.
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="left" />
<RelativeLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="center" />
</RelativeLayout>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="right" />
</LinearLayout>
Для двух кнопок
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="left" />
<RelativeLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="right">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="right" />
</RelativeLayout>
</LinearLayout>