Я знаю , что мы можем установить следующие значения для android:gravity
и android:layout_gravity
свойств:
center
center_vertical
center_horizontal
, так далее.
Но я запутался в отношении обоих.
В чем разница между использованием android:gravity
и android:layout_gravity
?
android
android-layout
android-gravity
Пареш Майани
источник
источник
ImageView
Кажется, ведут себя иначе, чем уTextView
.Ответы:
Их имена должны помочь вам:
android:gravity
устанавливает серьезность содержимого (то есть его подпредставлений) того, на которомView
оно используется.android:layout_gravity
устанавливает гравитациюView
илиLayout
относительно его родителя.И пример здесь .
источник
layout_
чем-то определяет то, что влияет на элементы снаружи.android:gravity
установлено значение left, а для его дочерних элементовandroid:layout_gravity
установлено значение right? с какой стороны выстроятся дети?Внутри снаружи
gravity
упорядочивает содержимое внутри представления.layout_gravity
организует позицию вида вне себя.Иногда помогает увидеть картинку тоже. Зеленый и синий цвета,
TextViews
а два других цвета фонаLinearLayouts
.Ноты
layout_gravity
Не работает для представлений вRelativeLayout
. Используйте его для просмотра вLinearLayout
илиFrameLayout
. Смотрите мой дополнительный ответ для более подробной информации.gravity
не будет никакого эффекта. Таким образом,wrap_content
иgravity
бессмысленно вместе.layout_gravity
не будет никакого эффекта. Таким образом,match_parent
иlayout_gravity
бессмысленно вместе.layout_gravity=center
Выглядит так же , какlayout_gravity=center_horizontal
здесь , потому что они находятся в вертикальной линейной компоновке. В этом случае вы не можете центрировать вертикально, поэтомуlayout_gravity=center
центрируетесь только горизонтально.gravity
иlayout_gravity
представлений в макете. Чтобы увидеть, что происходит, когда вы устанавливаетеgravity
саму структуру родительского макета, ознакомьтесь с дополнительным ответом, о котором я говорил выше. (Резюме:gravity
не очень хорошо работает,RelativeLayout
но может быть полезно сLinearLayout
.)Помните, что макет _gravity упорядочивает вид в своем макете . Gravity упорядочивает содержимое внутри представления.
XML
Вот xml для изображения выше для вашей справки:
связанные с
источник
Разница
android:layout_gravity
является Outside Серьезность View. Определяет направление, в котором представление должно касаться границы своего родителя.android:gravity
является Внутри тяжестью этого вида. Указывает, в каком направлении должно выравниваться его содержимое.Эквиваленты HTML / CSS
Легкий трюк, чтобы помочь вам вспомнить
Взять
layout-gravity
как "Лай-аут-гравитация".источник
Краткий ответ: используйте
android:gravity
илиsetGravity()
для контроля гравитации всех дочерних видов контейнера; использоватьandroid:layout_gravity
илиsetLayoutParams()
контролировать гравитацию отдельного вида в контейнере.Длинная история: для контроля силы тяжести в контейнере с линейной компоновкой, например,
LinearLayout
илиRadioGroup
, есть два подхода:1) Чтобы контролировать серьезность ВСЕХ дочерних представлений
LinearLayout
контейнера (как вы это делали в своей книге), используйтеandroid:gravity
(неandroid:layout_gravity
) в макете XML-файл илиsetGravity()
метод в коде.2) Чтобы контролировать гравитацию дочернего представления в его контейнере, используйте
android:layout_gravity
атрибут XML. В коде нужно получитьLinearLayout.LayoutParams
представление и установить его гравитацию. Вот пример кода, который устанавливает кнопку на дно в горизонтально ориентированном контейнере:Для горизонтального
LinearLayout
контейнера горизонтальная гравитация его дочернего вида выравнивается по левому краю один за другим и не может быть изменена. Установкаandroid:layout_gravity
на неcenter_horizontal
имеет никакого эффекта. Вертикальная гравитация по умолчанию - центр (или center_vertical) и может быть изменен на верх или низ. На самом деле этоlayout_gravity
значение по умолчанию,-1
но Android помещает его вертикально по центру.Чтобы изменить горизонтальные позиции дочерних представлений в горизонтальном линейном контейнере, можно использовать
layout_weight
поля и отступы дочернего представления.Аналогично, для контейнера вертикальной группы представлений вертикальная гравитация его дочернего вида выравнивается по вертикали друг над другом и не может быть изменена. Горизонтальная гравитация по умолчанию - центр (или
center_horizontal
) и может быть изменена влево или вправо.На самом деле, дочернее представление, такое как кнопка, также имеет
android:gravity
атрибут XML иsetGravity()
метод для управления его дочерними представлениями - текст в нем.Button.setGravity(int)
Связан с этой записи developer.android.com .источник
Из того, что я могу собрать, layout_gravity - это гравитация этого представления внутри его родителя, а гравитация - это гравитация детей внутри этого представления.
Я думаю, что это правильно, но лучший способ выяснить это - поиграть.
источник
Посмотрите на изображение, чтобы понять гравитацию
источник
Если мы хотим установить гравитацию содержимого внутри представления, мы будем использовать «android: gravity», и если мы хотим установить гравитацию этого представления (в целом) в его родительском представлении, тогда мы будем использовать «android: layout_gravity».
источник
Просто подумал, что я добавлю свое собственное объяснение здесь - исходя из фона iOS, вот как я усвоил два термина в iOS: «Gravity Layout Gravity» влияет на вашу позицию в суперпредставлении. «Гравитация» влияет на положение ваших подпредставлений внутри вас. Говоря иначе, Layout Gravity позиционирует себя, а гравитация - ваших детей.
источник
Есть много различий в
gravity
иlayout-gravity
. Я собираюсь объяснить свой опыт в отношении этих двух концепций ( всю информацию, которую я получил благодаря моим наблюдениям и некоторым веб-сайтам ).Запись:-
Гравитация используется внутри View Content, поскольку некоторые пользователи имеют ответ, и он одинаков для всех
ViewGroup Layout
.Layout-gravity
используется с родительским представлением, так как некоторые пользователи имеют ответ.Gravity and Layout-gravity
это работа более полезна сFrameLayout
детьми.We can't use Gravity and Layout-gravity
в теге FrameLayout ....Мы можем установить Child View в любом месте
FrameLayout
использованияlayout-gravity
.Мы можем использовать каждое отдельное значение силы тяжести внутри FrameLayout (например: -
center_vertical
,center_horizontal
,center
,top
, и т.д.), но это не возможно с другими ViewGroup макетами.FrameLayout
полностью работает надLayout-gravity
. Пример: - Если вы продолжаете работать,FrameLayout
вам не нужно менять весь макет для добавления нового вида. Вы просто добавляете View как последний вFrameLayout
и присваиваете емуLayout-gravity
значение ( это преимущества макетно-гравитации с FrameLayout ).Вывод:-
Gravity
работает так же, как и выше, но здесь есть различие в том, что мы можем использовать гравитацию внутри,LinearLayout View
аRelativeLayout View
это невозможно вFrameLayout View
.Примечание: - Здесь мы можем установить только 3 значения (
layout_gravity
isleft
|right
|center
(также называетсяcenter_horizontal
)).Вывод:-
Примечание: - Здесь мы также можем установить 3 значения (
layout_gravity
istop
|bottom
|center
(также называетсяcenter_vertical
)).вывод:-
Примечание: - Мы не можем использовать
layout_gravity
в,RelativeLayout Views
но мы можем использовать,gravity
чтобы установитьRelativeLayout
childs в той же позиции ....источник
textColor
белый цвет,view
то это было бы очень здорово. : DЛегкая уловка, чтобы помнить, что гравитация применяется к нам внутри Земли. Итак,
android:gravity
для внутреннего обзора.Rememeber с отъездом в скрутках из _gravity , которые помогли бы , чтобы вы запомнили , что
android:layout_gravity
будет ссылаться вне точки зренияисточник
То, что я увидел в блоге Сандипа, которое я почти пропустил, решило мою проблему. Он сказал, что
layout_gravity
не работает сLinearLayout
.Если вы используете a
LinearLayout
и настройки гравитации сводят вас с ума (как и я), то переключитесь на что-то другое.Я на самом деле переключился на
RelativeLayout
тогда использованныйlayout_alignParentLeft
иlayout_alignParentRight
на 2 содержалTextView
s, чтобы получить их на одной линии, чтобы идти далеко налево и далеко направо.источник
Основное различие между ними заключается в том, что
Android: гравитация используется для дочерних элементов представления.
android: layout_gravity используется для этого элемента относительно родительского представления.
источник
android:gravity
используется для указания того, как поместить содержимое объекта в сам объект. Иными словами, android: gravity используется для указания серьезности содержимого представления.android:layout_gravity
это атрибуция, которую ребенок может предоставить своему родителю, чтобы определить серьезность представления в его родителях.Для более подробной информации вы можете посетить
источник
Гравитация: позволяет перемещать содержимое внутри контейнера. (Как будут размещены подвиды).
Важно: (ПЕРЕМЕСТИТЬ вдоль оси X или оси Y в пределах доступного пространства).
Пример: допустим, если вы работали с LinearLayout (Height: match_parent, Width: match_parent) в качестве элемента корневого уровня, то у вас будет полное доступное пространство кадра; и дочерние представления говорят, что 2 TextViews (Height: wrap_content, Width: wrap_content) внутри LinearLayout можно перемещать по оси x / y, используя соответствующие значения для гравитации на родителе.
Layout_Gravity: позволяет переопределить поведение родительской гравитации ТОЛЬКО вдоль оси x.
Важно: (MOVE [переопределить] вдоль оси X в пределах доступного пространства).
Пример: если вы помните предыдущий пример, мы знаем, что гравитация позволила нам двигаться вдоль оси x / y, т.е. место TextViews внутри LinearLayout. Давайте просто скажем, что LinearLayout определяет гравитацию: центр; Это означает, что каждый TextView должен быть в центре как вертикально, так и горизонтально. Теперь, если мы хотим, чтобы один из TextView двигался влево / вправо, мы можем переопределить указанное поведение гравитации, используя layout_gravity в TextView.
Бонус: если вы копаете глубже, вы обнаружите, что текст в TextView действует как подвид; поэтому, если вы примените гравитацию к TextView, текст внутри TextView будет перемещаться. (вся концепция применима и здесь)
источник
Гравитация используется для установки выравнивания текста в видах, но layout_gravity используется для самостоятельного задания видов. Давайте возьмем пример, если вы хотите выровнять текст, написанный в editText, затем использовать гравитацию, и вы хотите выровнять этот editText или любую кнопку или любое представление, а затем использовать layout_gravity, так что это очень просто.
источник
Гравитация : используется для простых представлений, таких как textview, edittext и т. д.
layout_gravity : используется для гравитации текущего вида только в контексте его относительного родительского вида, такого как линейный макет или FrameLayout, чтобы сделать вид в центре или любой другой гравитации своего родителя.
источник
используется для настройки содержимого представления относительно его заданной позиции (выделенной области).
android:gravity="left"
не будет ничего делать, еслиlayout_width
равно"wrap_content"
используется для самого представления относительно родительского файла или файла макета.
источник
android:gravity
-> Устанавливает плотность содержимого View, на котором он используется.android:layout_gravity
-> Устанавливает гравитацию своего родительского вида или макетаисточник
гравитация - относится к своему собственному мнению.
layout-gravity --- Применяется к представлению, связанному с его родителем.
источник
android:gravity
Устанавливает тяжесть (положение) детей , в то время какandroid:layout_gravity
устанавливает позицию самого вида. Надеюсь, поможетисточник