Разницу между силой тяжести и макет гравитация на Андроид
Я знаю, что мы можем установить следующие значения android:gravity
и android:layout_gravity
свойства:
center
center_vertical
-
center_horizontal
и т. д.
но я в замешательстве относительно обоих из них.
в чем разница между использованием android:gravity
и android:layout_gravity
?
19 ответов:
их имена должны помочь вам:
android:gravity
устанавливает гравитацию содержимого (т. е. это подвиды)View
Он используется.android:layout_gravity
устанавливает гравитациюView
илиLayout
относительно его родителя.и пример здесь.
разница
android:layout_gravity
это за пределами гравитация зрения. Указывает направление, в котором представление должно касаться родительской границы.
android:gravity
- это внутри серьезность этого взгляда. Указывает, в каком направлении должно выравниваться его содержимое.эквиваленты HTML/CSS
Android | CSS ————————————————————————+———————————— android:layout_gravity | float android:gravity | text-align
простой трюк, чтобы помочь вам вспомнить
взять
layout-gravity
как"Lay-outside-gravity".
gravity
содержимое веб-страницы внутри вид.layout_gravity
упорядочивает положение вида за пределами сам по себе.иногда это помогает увидеть картину, тоже. Зеленый и синий
TextViews
и два других цвета фона являютсяLinearLayouts
.Примечания
- The
layout_gravity
не работает для представлений вRelativeLayout
. Используйте его для просмотра вLinearLayout
илиFrameLayout
. Смотрите мой дополнительный ответ для более подробной информации.- ширина (или высота) представления должна быть больше, чем его содержимое. В противном случае
gravity
не будет иметь никакого эффекта. Таким образом,wrap_content
иgravity
бессмысленны вместе.- ширина вида (или высота) должно быть меньше, чем у родителя. В противном случае
layout_gravity
не будет иметь никакого эффекта. Таким образом,match_parent
иlayout_gravity
бессмысленны вместе.- The
layout_gravity=center
выглядит так же, какlayout_gravity=center_horizontal
здесь, потому что они находятся в вертикальной линейной компоновки. В этом случае вы не можете центрироваться вертикально, поэтомуlayout_gravity=center
только центры по горизонтали.- этот ответ касался только настройки
gravity
иlayout_gravity
на вид в макете. Чтобы увидеть, что произойдет, когда вы установитеgravity
из родительского сам макет, проверьте дополнительный ответ о чем я говорил выше. (Резюме:gravity
не работает сRelativeLayout
но может быть полезно сLinearLayout
.)так что помни,планировка_gravity упорядочивает вид в своем планировка. Гравитация упорядочивает содержимое внутри представления.
xml
вот xml для приведенного выше изображения для вашего ссылка:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <LinearLayout android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:background="#e3e2ad" android:orientation="vertical" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:textSize="24sp" android:text="gravity=" /> <TextView android:layout_width="200dp" android:layout_height="40dp" android:background="#bcf5b1" android:gravity="left" android:text="left" /> <TextView android:layout_width="200dp" android:layout_height="40dp" android:background="#aacaff" android:gravity="center_horizontal" android:text="center_horizontal" /> <TextView android:layout_width="200dp" android:layout_height="40dp" android:background="#bcf5b1" android:gravity="right" android:text="right" /> <TextView android:layout_width="200dp" android:layout_height="40dp" android:background="#aacaff" android:gravity="center" android:text="center" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:background="#d6c6cd" android:orientation="vertical" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:textSize="24sp" android:text="layout_gravity=" /> <TextView android:layout_width="200dp" android:layout_height="40dp" android:layout_gravity="left" android:background="#bcf5b1" android:text="left" /> <TextView android:layout_width="200dp" android:layout_height="40dp" android:layout_gravity="center_horizontal" android:background="#aacaff" android:text="center_horizontal" /> <TextView android:layout_width="200dp" android:layout_height="40dp" android:layout_gravity="right" android:background="#bcf5b1" android:text="right" /> <TextView android:layout_width="200dp" android:layout_height="40dp" android:layout_gravity="center" android:background="#aacaff" android:text="center" /> </LinearLayout> </LinearLayout>
по теме
короткий ответ: используйте
android:gravity
илиsetGravity()
для управления гравитацией всех дочерних представлений контейнера; используйтеandroid:layout_gravity
илиsetLayoutParams()
для управления гравитацией отдельного вида в контейнере.длинная история: для управления гравитацией в линейном контейнере макета, таком как
LinearLayout
илиRadioGroup
, есть два подхода:1) для управления гравитацией всех дочерних представлений a
LinearLayout
контейнер (как вы сделали в своей книге), используйтеandroid:gravity
(неandroid:layout_gravity
) в XML-файл макета илиsetGravity()
метод в коде.2) для управления гравитацией дочернего представления в его контейнере используйте
android:layout_gravity
атрибут XML. В коде, нужно получитьLinearLayout.LayoutParams
вида и установить его гравитацию. Вот пример кода, который устанавливает кнопку на дно в горизонтально ориентированном контейнере:import android.widget.LinearLayout.LayoutParams; import android.view.Gravity; ... Button button = (Button) findViewById(R.id.MyButtonId); // need to cast to LinearLayout.LayoutParams to access the gravity field LayoutParams params = (LayoutParams)button.getLayoutParams(); params.gravity = Gravity.BOTTOM; button.setLayoutParams(params);
горизонтальный
LinearLayout
контейнер, горизонтальная гравитация его дочернего вида выравнивается по левому краю один за другим и не может быть изменена. Установкаandroid:layout_gravity
доcenter_horizontal
не имеет никакого эффекта. Этот по умолчанию вертикальная гравитация является центральной (или center_vertical) и может быть изменена на верхнюю или нижнюю. На самом деле по умолчаниюlayout_gravity
значение-1
но Android поставил его центр вертикально.для изменения горизонтального положения дочерних видов в горизонтальном линейном контейнере можно использовать
layout_weight
, margin и padding мнение ребенка.аналогично, для контейнера группы вертикального вида вертикальная гравитация его дочернего вида выравнивается сверху вниз и не может быть измененный. Горизонтальная гравитация по умолчанию-центр (или
center_horizontal
) и может быть изменен влево или вправо.на самом деле, дочернее представление, такое как кнопка, также имеет
android:gravity
атрибут XML иsetGravity()
метод управления его дочерними представлениями -- текст в нем. ЭлементButton.setGravity(int)
связано с этим developer.android.com запись.
из того, что я могу собрать layout_gravity является ли гравитация этого представления внутри его родителя, и гравитация это серьезность детей внутри этого представления.
Я думаю, что это правильно, но лучший способ узнать, чтобы играть вокруг.
хотя на этот вопрос уже дан ответ, у меня есть несколько образцов, демонстрирующих использование гравитации, layout_gravity и layout_weight.
вы можете найти примеры в http://juanpickselov.com/LayoutExamples.zip
Я создал файлы в Eclipse, удалены .в SVN папки и включили стилей, строк, цветов и т. д. Файлы макета являются главным пунктом демонстраций. Поскольку я новичок в разработке Java и Android, можно найти Java неэффективный. Файлы могут быть скопированы в проект Eclipse, или я также использовал их в Netbeans с помощью плагина для разработки Android, доступного для этой IDE.
Если мы хотим установить гравитацию контента внутри представления, то мы будем использовать "android: gravity", и если мы хотим установить гравитацию этого представления (в целом) в его родительском представлении, то мы будем использовать"android:layout_gravity".
просто подумал, что я добавлю здесь свое собственное объяснение-исходя из фона на iOS, вот как я усвоил эти два в терминах iOS: "гравитация макета" влияет на вашу позицию в супервизоре. "Гравитация" влияет на положение ваших подвидов внутри вас. Другими словами, макет гравитации позиционирует вас самих, а гравитация позиционирует ваших детей.
есть много различий в
gravity
иlayout-gravity
. Я собираюсь объяснить свой опыт об этих 2 понятиях (вся информация, которую я получил из-за моего наблюдения и некоторых веб-сайтов).использование силы тяжести и расположение-гравитация в
FrameLayout
.....Примечание:
гравитация используется внутри Просмотр Содержимого как некоторые пользователи имеют ответ, и это то же самое для всех
ViewGroup Layout
.
Layout-gravity
используется с родительским представлением, поскольку у некоторых пользователей есть ответ.
Gravity and Layout-gravity
и работать более полезным СFrameLayout
Чайлдс .We can't use Gravity and Layout-gravity
в теге FrameLayout ....мы можем установить Дочерний вид в любом месте
FrameLayout
используяlayout-gravity
.мы можем использовать каждое одиночное значение силы тяжести внутри FrameLayout (например: -
center_vertical
,center_horizontal
,center
,top
и т. д.), Но это невозможно с другими макетами ViewGroup .
FrameLayout
наLayout-gravity
. Пример: - Если вы работаете наFrameLayout
затем не нужно менять весь план для добавления нового вида. Ты просто добавить вид как последний вFrameLayout
и дал емуLayout-gravity
С значение.(это adavantages макета-гравитации с FrameLayout).посмотреть на примере. .....
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="match_parent" android:layout_height="100dp" android:textSize="25dp" android:background="#000" android:textColor="#264bd1" android:gravity="center" android:layout_gravity="center" android:text="Center Layout Gravity"/> <TextView android:layout_width="wrap_content" android:layout_height="80dp" android:textSize="25dp" android:background="#000" android:textColor="#1b64b9" android:gravity="bottom" android:layout_gravity="bottom|center" android:text="Bottom Layout Gravity" /> <TextView android:layout_width="wrap_content" android:layout_height="80dp" android:textSize="25dp" android:background="#000" android:textColor="#d75d1c" android:gravity="top" android:layout_gravity="top|center" android:text="Top Layout Gravity"/> <TextView android:layout_width="wrap_content" android:layout_height="80dp" android:textSize="25dp" android:background="#000" android:layout_marginTop="100dp" android:textColor="#d71f1c" android:gravity="top|right" android:layout_gravity="top|right" android:text="Top Right Layout Gravity"/> <TextView android:layout_width="wrap_content" android:layout_height="80dp" android:textSize="25dp" android:background="#000" android:layout_marginBottom="100dp" android:textColor="#d71cb2" android:layout_gravity="bottom" android:gravity="bottom" android:text="Top Left Layout Gravity"/> </FrameLayout>
выход:-
использование гравитации и компоновки-гравитация в LinearLayout .....
Gravity
работает так же, как и выше, но здесь разницу в том, что мы можем использовать гравитацию внутриLinearLayout View
иRelativeLayout View
что невозможно вFrameLayout View
.LinearLayout с вертикальной ориентацией ....
Примечание.:- Здесь мы можем установить только 3 значения
layout_gravity
то есть (left
/right
/center
(также называемыйcenter_horizontal
)).посмотрим на примере :-
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:orientation="vertical" android:layout_height="match_parent"> <TextView android:layout_width="wrap_content" android:layout_height="100dp" android:textSize="25dp" android:background="#000" android:textColor="#264bd1" android:gravity="center" android:layout_gravity="center_horizontal" android:text="Center Layout Gravity \nor \nCenter_Horizontal"/> <TextView android:layout_width="wrap_content" android:layout_height="80dp" android:textSize="25dp" android:background="#000" android:layout_marginTop="20dp" android:textColor="#d75d1c" android:layout_gravity="right" android:text="Right Layout Gravity"/> <TextView android:layout_width="wrap_content" android:layout_height="80dp" android:textSize="25dp" android:background="#000" android:layout_marginBottom="100dp" android:textColor="#d71cb2" android:layout_gravity="left" android:layout_marginTop="20dp" android:gravity="bottom" android:text="Left Layout Gravity"/> </LinearLayout>
выход:-
LinearLayout с ориентацией по горизонтали ....
Примечание:- здесь мы можем установить также 3 значения
layout_gravity
то есть (top
/bottom
/center
(также называемыйcenter_vertical
)).посмотрим на примере :-
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:orientation="horizontal" android:layout_height="match_parent"> <TextView android:layout_width="120dp" android:layout_height="100dp" android:textSize="25dp" android:background="#000" android:textColor="#264bd1" android:gravity="center" android:layout_gravity="bottom" android:text="Bottom \nLayout \nGravity"/> <TextView android:layout_width="120dp" android:layout_height="100dp" android:textSize="25dp" android:background="#000" android:layout_marginTop="20dp" android:textColor="#d75d1c" android:layout_gravity="center" android:text="Center \nLayout \nGravity"/> <TextView android:layout_width="150dp" android:layout_height="100dp" android:textSize="25dp" android:background="#000" android:layout_marginBottom="100dp" android:textColor="#d71cb2" android:layout_gravity="left" android:layout_marginTop="20dp" android:text="Left \nLayout \nGravity"/> </LinearLayout>
выход:-
Примечание: - мы не можем использовать
layout_gravity
наRelativeLayout Views
но мы можем использоватьgravity
установитьRelativeLayout
Чайлдс на ту же позицию....
что-то я видел в блоге Сандипа, что я почти пропустил, исправлена моя проблема. Он сказал
layout_gravity
НЕ РАБОТАЕТ СLinearLayout
.если вы используете
LinearLayout
и настройки гравитации сводят вас с ума (как и я), а затем переключитесь на что-то другое.Я на самом деле перешли к используется
layout_alignParentLeft
иlayout_alignParentRight
на 2 содержатсяTextView
s, чтобы получить их на одной линии, чтобы перейти левой и правой.
легкий трюк, чтобы помнить, что это гравитация применяется к нам внутри Земли. Итак,
android:gravity
на внутри вид.помнят из на лежализ _гравитация который поможет вам вспомнить, что
android:layout_gravity
будет относиться к за пределами вид
android:gravity
используется для указания способа размещения содержимого объекта внутри самого объекта. Другими словами, android:gravity используется для указания тяжести содержимого представления.
android:layout_gravity
является атрибуцией, которую ребенок может предоставить своему родителю, чтобы указать гравитацию представления в своих родителях.для более подробной информации вы можете посетить
http://developer.android.com/reference/android/widget/LinearLayout.LayoutParams.html
основное различие между ними заключается в том, что-
android: гравитация используется для дочерних элементов представления.
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.
важно: (перемещение[переопределение] вдоль оси X в пределах доступного пространства).
пример: Если вы помните предыдущий пример, мы знаем, что гравитация позволила нам двигаться вдоль оси x/y, т. е.; место TextViews внутри Макетом. Скажем, LinearLayout определяет gravity: center; это означает, что каждый TextView должен быть центром как по вертикали, так и по горизонтали. Теперь, если мы хотим, чтобы один из TextView шел влево/вправо, мы можем переопределить указанное поведение гравитации с помощью layout_gravity на TextView.
бонус: Если вы копнете глубже, вы обнаружите, что текст в TextView действует как суб-вид; поэтому, если вы примените гравитацию на TextView, текст внутри TextView будет перемещаться. (вся концепция применима и здесь)
гравитация используется для установки выравнивания текста в представлениях, но layout_gravity используется для установки представлений самостоятельно. Давайте возьмем пример, если вы хотите выровнять текст, написанный в editText, а затем использовать гравитацию, и вы хотите выровнять этот editText или любую кнопку или любое представление, а затем использовать layout_gravity, поэтому его очень просто.
гравитация: используется для простых представлений, таких как textview, edittext и т. д.
layout_gravity: используется для текущего вида только гравитации в контексте его относительного родительского вида, такого как линейный макет или FrameLayout, чтобы сделать вид в центре или любой другой тяжести его родителя.
android:gravity
используется для настройки содержимого вида относительно его заданного положения (выделенной области).
android:gravity="left"
ничего не будет делать, еслиlayout_width
равна"wrap_content"
android:layout_gravity
используется для самого представления относительно родительского файла или файла макета.