Layout gravity android programmatically

Гравитация и layout_gravity на Android

Я знаю, что мы можем установить следующие значения для свойств android:gravity and android:layout_gravity :

  1. center
  2. center_vertical
  3. center_horizontal и т. Д.

Но я смущен в отношении обоих.

В чем разница между использованием android:gravity и android:layout_gravity ?

Их имена должны помочь вам:

  • android:gravity задает тяжесть содержимого вида, в котором он используется.
  • android:layout_gravity устанавливает серьезность представления или Layout в его родительском android:layout_gravity .

android:layout_gravity – это внешняя гравитация вида. Это означает, что нужно указать направление, в котором вид должен касаться границы его родителя.

android:gravity – это внутренняя гравитация этого вида. Это означает, что в этом направлении содержимое должно совпадать.

Эквиваленты HTML / CSS:

android:layout_gravity = float в CSS

android:gravity = text-align в CSS

Легкий трюк, который нужно запомнить: возьмите «макет-гравитацию» как «Lay-outside-gravity»

Внутри снаружи

  • gravity упорядочивает содержимое внутри представления.
  • lay out _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 вертикально в этом случае, поэтому layout_gravity=center только центрируется по горизонтали.
  • Этот ответ касался только установки gravity и layout_gravity на представлениях в макете. Чтобы узнать, что произойдет, когда вы установите gravity самого родительского макета, ознакомьтесь с дополнительным ответом, о котором я говорил выше. (Резюме: gravity не работает на RelativeLayout но может быть полезна с LinearLayout .)

Поэтому помните, что макет _gravity упорядочивает представление в своем макете . Гравитация упорядочивает содержимое внутри представления.

Вот xml для приведенного выше изображения для вашей справки:

Связанный

  • Разница между запасом и маркой View
  • Match_parent vs wrap_content
  • Как настроить гравитацию и плотность размещения LinearLayout программно

Короткий ответ: используйте 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 не влияет. Вертикальная гравитация по умолчанию – центральная (или центральная) и может быть изменена на верхнюю или нижнюю. Фактически значение layout_gravity по умолчанию layout_gravity -1 но Android ставит его вертикально по центру.

Чтобы изменить горизонтальные положения дочерних видов в горизонтальном линейном контейнере, можно использовать layout_weight , margin и padding дочернего представления.

Читайте также:  Facebook permissions android что это

Аналогично, для вертикального контейнера View Group вертикальная гравитация его дочернего представления выравнивается по высоте одна под другой и не может быть изменена. По умолчанию горизонтальная гравитация является центральной (или center_horizontal ) center_horizontal и может быть изменена влево или вправо.

Фактически, дочерний вид, такой как кнопка, также имеет атрибут android:gravity XML и метод setGravity() для управления его дочерними представлениями – текст в нем. Button.setGravity(int) связан с этой записью developer.android.com .

Из того, что я могу собрать, layout_gravity – это серьезность этого представления внутри его родителя, а гравитация – это сила тяжести детей внутри этой точки зрения.

Я думаю, что это правильно, но лучший способ узнать – это поиграть.

Посмотрите на изображение, чтобы быть понятным о гравитации

Хотя вопрос уже ответил, у меня есть несколько примеров, демонстрирующих использование силы тяжести, layout_gravity и layout_weight.

Я создал файлы в Eclipse, удалил подпапки .svn и включил стили, строки, цвета и т. Д. Файлы макетов являются основной темой демонстраций. Поскольку я являюсь разработчиком Java и Android, можно найти Java неэффективным. Файлы могут быть скопированы в проект Eclipse или я также использовал их в Netbeans с плагином разработки Android, доступным для этой среды разработки.

Если мы хотим установить серьезность содержимого внутри представления, мы будем использовать «android: gravity», и если мы хотим установить серьезность этого представления (в целом) в его родительском представлении, мы будем использовать «android: layout_gravity».

Просто подумал, что я добавлю свое объяснение здесь – исходя из фона на iOS, вот как я усвоил эти два термина iOS: «Макет Gravity» влияет на вашу позицию в супервизии. «Гравитация» влияет на положение ваших подзонов внутри вас. С другой стороны, Layout Gravity позиционирует вас самостоятельно, в то время как гравитация позиционирует ваших детей.

Что-то, что я видел в блоге Сандипа, которое я почти пропустил, исправил мою проблему. Он сказал, что layout_gravity не работает с LinearLayout .

Если вы используете LinearLayout а настройки гравитации приводят вас в орехи (как и я), переключитесь на что-то еще.

Я фактически переключился на RelativeLayout затем использовал layout_alignParentLeft и layout_alignParentRight на 2 содержащихся TextView s, чтобы получить их на одной строке, чтобы идти далеко влево и вправо.

Существует много различий в gravity и layout-gravity . Я собираюсь объяснить свой опыт в отношении этих двух концепций ( вся информация, полученная из-за моего наблюдения и некоторых веб-сайтов ).

Использование гравитации и макета гравитации в FrameLayout …..

Заметка:-

Гравитация используется внутри Просмотр содержимого, так как у некоторых пользователей есть ответ, и он одинаковый для всех 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 ).

Использование гравитации и макета гравитации в LinearLayout …..

Gravity работающая так же, как и выше, но здесь отличается тем, что мы можем использовать Gravity внутри LinearLayout View и RelativeLayout View что невозможно в представлении FrameLayout View .

LinearLayout с ориентацией по вертикали ….

Примечание. Здесь мы можем установить только 3 значения layout_gravity которые ( left | right | center (также называемые center_horizontal )).

Читайте также:  Android turn on flashlight

LinearLayout с горизонтальной ориентацией ….

Примечание: – Здесь мы также можем установить 3 значения layout_gravity которые ( top | bottom | center (также называемый center_vertical )).

Примечание. – Мы не можем использовать layout_gravity в RelativeLayout Views но мы можем использовать gravity чтобы установить RelativeLayout childs в ту же позицию ….

android:gravity используется, чтобы указать, как разместить содержимое объекта внутри самого объекта. Другими словами, андроид: гравитация используется для определения тяжести содержимого представления.

android:layout_gravity – это атрибуция, которую ребенок может предоставить своему родителю, чтобы определить серьезность представления внутри своих родителей.

Более подробную информацию вы можете посетить

Основное различие между ними состоит в том,

Android: гравитация используется для дочерних элементов представления.

Android: layout_gravity используется для этого элемента относительно родительского представления.

Легкий трюк, чтобы помнить об этом – сила тяжести относится к нам внутри Земли. Итак, android:gravity для внутреннего зрения.

Вспомните, как вы выложите _gravity, который поможет вам запомнить этот android:layout_gravity будет ссылаться на внешний вид

Гравитация используется для установки выравнивания текста в представлениях, но layout_gravity используется для установки собственных представлений. Давайте возьмем пример, если вы хотите выровнять текст, написанный в editText, затем использовать гравитацию, и вы хотите выровнять этот editText или любую кнопку или любое представление, а затем использовать layout_gravity, поэтому его очень просто.

Используется для настройки содержимого представления относительно его заданной позиции (выделенной области). android:gravity=»left» ничего не сделает, если layout_width равно «wrap_content»

Используется для представления относительно родительского или файла макета.

Gravity: используется для простых представлений, таких как textview, edittext и т. Д.

Layout_gravity : используется для родительских представлений, таких как линейный макет, чтобы сделать вид в центре его родителей.

android:gravity -> Устанавливает гравитацию содержимого вида, в котором он используется.

android:layout_gravity -> Устанавливает серьезность представления родителя или макета

Источник

Как установить layout_gravity программно?

Мой вопрос прост,

Как установить мои кнопки layout_gravity программно?

Я нашел это в интернете, но он просто выбрасывает исключение Nullpointer:

Для значений гравитации и как установить гравитацию проверить гравитацию .

В основном, вы должны выбрать в LayoutParams зависимости от родителя. Это может быть RelativeLayout , и LinearLayout т.д .

Я не хотел бы воскрешать старые темы, но это проблема, на которую нет правильного ответа, и более того, я сам столкнулся с этой проблемой.

Вот длинный кусок, если вам интересен только ответ, пожалуйста, прокрутите весь код до кода:

Android: гравитация и Android: layout_gravity работает по-разному. Вот статья, которую я прочитал, которая помогла мне.

Суть статьи: гравитация влияет на вид после того, как высота / ширина назначены. Таким образом, центр тяжести не повлияет на вид, который выполняется FILL_PARENT (думайте об этом как об автоматическом поле). Центр layout_gravity БУДЕТ влиять на представление, которое является FILL_PARENT (думайте об этом как о автопэде).

По сути, Android: layout_gravity не может быть доступен программно, только Android: гравитация. В случае с ОП и в моем случае принятый ответ не размещает кнопку вертикально по центру.

Чтобы улучшить ответ Karthi:

android: layout_gravity показывает «Нет связанных методов», что означает, что нельзя получить доступ программно. В то время как гравитация — это поле в классе.

Источник

Как установить layout_gravity программно?

Мой вопрос прост,

Как настроить программные кнопки layout_gravity?

Я нашел это в Интернете, но это просто бросает мне исключение Nullpointer:

Читайте также:  Таймер для андроид дмб таймер

Для значений силы тяжести и как установить проверку силы тяжести Gravity

И в основном, вы должны выбрать LayoutParams в зависимости от родителя. Это может быть RelativeLayout, LinearLayout и т. Д. …

Я бы не хотел воскрешать старые темы, но это проблема, на которую не ответил правильно, и тем более я сам столкнулся с этой проблемой.

Вот длинный бит, если вас интересует только ответ, прокрутите весь путь до кода:

Android: gravity and android: layout_gravity работает по-разному. Вот статья, которую я прочитал, которая мне помогла.

GIST статьи: гравитация влияет на представление после назначения высоты / ширины. Таким образом, центр тяжести не будет влиять на представление, которое сделано FILL_PARENT (подумайте об этом как автомаршрут). Layout_gravity center WILL влияет на представление, которое является FILL_PARENT (подумайте об этом как автоматическую панель).

В принципе, android: layout_gravity МОЖЕТ быть доступным программно, только андроид: гравитация. В случае OP и в моем случае принятый ответ не ставит кнопку вертикально в центр.

Чтобы улучшить ответ Карти:

Ссылка на LinearLayout.LayoutParams .

Android: layout_gravity показывает «Нет связанных методов», что означает не доступ к программному обеспечению. В то время как гравитация – это поле в классе.

Для layout_gravity используйте ответ, указанный «karthi». Этот метод устанавливает силу тяжести, чтобы помещать детей внутрь вида.

У меня была аналогичная проблема с программным настройкой layout_gravity на кнопках в GridLayout.

Трюк состоял в том, чтобы установить гравитацию на макете кнопокParams ПОСЛЕ того, как кнопка была добавлена ​​к родительскому (GridLayout), иначе гравитация будет проигнорирована .

Этот вопрос старый, но у меня была такая же проблема, и я решил это

Я использую следующее: (Xamarin и C # code)

SetGravity помещает мой textView в центр макета. Таким образом, свойство макета SetGravity относится к содержимому макета

Если вы хотите изменить layou_gravity существующего представления, сделайте следующее:

Не забудьте использовать правильные LayoutParams на основе типа макета, в котором находится ваш вид. Пример:

Используйте это, чтобы добавить более чем одну гравитацию

Если вам нужно установить Gravity для View, используйте следующие

Для установки layout_gravity для кнопки используйте поле силы тяжести для layoutparams как

Попробуйте эту надежду, это прощает спасибо

Остальные ответы правильные, я хочу добавить больше объяснений. Layout_gravity – это расположение позиции в родительском представлении.

Вы должны установить гравитацию ** после вызова метода parentView.addView () **. Мы можем видеть код:

И проблема нулевого указателя заключается в том, что он не вызывает addView перед getLayoutParams ().

В аннотации уже сказано: «Этот метод может возвращать значение null, если этот вид не привязан к родительской группе ViewGroup или <@ link # setLayoutParams (android.view.ViewGroup.LayoutParams)>не был успешно вызван. Когда представление присоединено к родительскому ViewGroup, этот метод не должен возвращать null. «

Если вы хотите поместить представление в центр родителя, вы можете сделать следующий код.

В этом разделе кода LinearLayout помещает первые элементы представления в центр родителя. Таким образом, мы не рассматриваем начальную ширину и высоту, чтобы организовать представление в центре. Я хорошо разбираюсь в коде.

yourLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); RelativeLayout, попробуйте этот код, он работает для меня: yourLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);

Отлично работает . Ни один из вышеперечисленных ответов не работает для меня. В настройке файла Xml гравитация и настройка layout_gravity различны. Ознакомьтесь с приведенным ниже кодом.

Также проверьте это, где вы можете найти четкое объяснение гравитации и layout_gravity.

Я переключился с LinearLayout.LayoutParams на RelativeLayout.LayoutParams, чтобы, наконец, получить результат, который я желал в пользовательском круге, который я создал.

Но вместо гравитации вы используете addRule

Источник

Оцените статью