Layout_gravity не работает в горизонтальной линейной компоновке
Я пытаюсь использовать layout_gravity
в горизонтальном linear layout
. Но, похоже, это не работает. Я не хочу использовать relative layout
или любой другой макет. Я хочу знать, почему он не работает с linear layout
. Раньше я использовал layout_gravity
в vertical
линейных макетах, и он работал так, как я ожидал.
<LinearLayout
android:id="@+id/shata"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<TextView
android:id="@+id/title_textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textColor="@color/black"
android:text="shata1"
android:textAppearance="?android:attr/textAppearanceMedium"
/>
<TextView
android:id="@+id/map_imageview"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="right"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="shata2"/>
</LinearLayout>
Как вы можете видеть, линейный макет имеет orientation=horizontal
и width=match_parent
(он находится только внутри корневого макета). Но оба TextViews отображаются слева от LinearLayout
, хотя я дал их layout_gravity=center
и layout_gravity=right
соответственно.
Ответы
Ответ 1
Короткий ответ: если у вас есть горизонтальный LinearLayout, то каждый ребенок может иметь только layout_gravity
значения top
, bottom
и center
.
Причина этого заключается в том, что вы уже сказали LinearLayout
выровнять каждый дочерний объект по горизонтали, слева направо в указанном вами порядке, что означает, что он позволяет указывать вертикальное выравнивание каждого дочернего элемента в параметр layout_gravity
, и наоборот, когда ваш LinearLayout
является вертикальным.
Там есть хорошая ссылка, объясняющая, как различные тяжести работают здесь.
Ответ 2
Если вы хотите, чтобы ваш ребенок рассматривался по центру, вам просто нужно придать весу линейного макета для детей. На линейном макете установите следующее:
android:gravity="center"
Надеюсь, я правильно понял ваш вопрос.
Ответ 3
В качестве дополнения к отклику Matt Taylor вы можете указать соотношение размеров элементов внутри макета, используя свойство layout_weight
. Подробнее см. .
Приведенный выше код разделит горизонтальное пространство на три равные области.
<LinearLayout
android:id="@+id/shata"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="0"
android:layout_height="match_parent"
android:layout_weight="1"/>
<TextView
android:layout_width="0"
android:layout_height="match_parent"
android:layout_weight="1"/>
<TextView
android:layout_width="0"
android:layout_height="match_parent"
android:layout_weight="1"/>
</LinearLayout>
Итак, в этом примере
- первый элемент выглядит как
layout_gravity="left"
- второй элемент выглядит как
layout_gravity="center"
- третий элемент выглядит как
layout_gravity="right"
Ответ 4
вы можете разделить макет на 3 части, затем в правой части поместите "shata2" в центральной части, поставьте "shata1", а левая часть - прозрачным.
<LinearLayout
android:id="@+id/shata"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<View
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
/>
<TextView
android:id="@+id/title_textview"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center|top"
android:layout_weight="1"
android:text="shata1"
android:gravity="center"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="#111" />
<TextView
android:id="@+id/map_imageview"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_gravity="right"
android:gravity="right"
android:text="shata2"
android:textAppearance="?android:attr/textAppearanceMedium" />
</LinearLayout>
но в вашем коде, когда вы используете линейный макет, он просто кладет взгляды один за другим, и он не заботится о тяжести макета.
надеюсь, что это будет полезно.
Ответ 5
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal">
<TextView
style="@style/Base.TextAppearance.AppCompat.Headline"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Blankets & Carpets" />
<ListView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/list_home_feature"
android:layout_marginLeft="10dp"
android:layout_marginTop="30dp"
android:layout_marginRight="10dp">
</ListView>
</LinearLayout>
Ответ 6
Один способ создания трех дочерних элементов в горизонтальном linearlayout будет (проверен):
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:weightSum="3"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1" />
<TextView
android:layout_width="0dp"
android:layout_weight="1"
android:layout_gravity="center_horizontal"
android:layout_height="wrap_content"/>
<TextView
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="" />