Android studio разместить элемент по центру

RelativeLayout

ReiativeLayout (относительная разметка) находится в разделе Layouts и позволяет дочерним компонентам определять свою позицию относительно родительского компонента или относительно соседних дочерних элементов (по идентификатору элемента). В RelativeLayout дочерние элементы расположены так, что если первый элемент расположен по центру экрана, другие элементы, выровненные относительно первого элемента, будут выровнены относительно центра экрана. При таком расположении, при объявлении разметки в XML-файле, элемент, на который будут ссылаться для позиционирования другие объекты представления, должен быть объявлен раньше, чем другие элементы, которые обращаются к нему по его идентификатору.

Важные атрибуты, которые связаны с родителем.

  • android:layout_alignParentBottom — выравнивание относительно нижнего края родителя
  • android:layout_alignParentLeft — выравнивание относительно левого края родителя
  • android:layout_alignParentRight — выравнивание относительно правого края родителя
  • android:layout_alignParentTop — выравнивание относительно верхнего края родителя
  • android:layout_centerInParent — выравнивание по центру родителя по вертикали и горизонтали
  • android:layout_centerHorizontal — выравнивание по центру родителя по горизонтали
  • android:layout_centerVertical — выравнивание по центру родителя по вертикали

Некоторые атрибуты можно использовать вместе, чтобы добиться нужного эффекта, например, разместить компонент в верхнем правом углу.

Компонент можно размещать не только относительно родителя, но и относительно других компонентов. Для этого все компоненты должны иметь свой идентификатор, по которому их можно будет отличать друг от друга. В этом случае вы можете задействовать другие атрибуты.

  • android:layout_above — размещается над указанным компонентом
  • android:layout_below — размещается под указанным компонентом
  • android:layout_alignLeft — выравнивается по левому краю указанного компонента
  • android:layout_alignRight — выравнивается по правому краю указанного компонента
  • android:layout_alignTop — выравнивается по верхнему краю указанного компонента
  • android:layout_alignBottom — выравнивается по нижнему краю указанного компонента
  • android:layout_toLeftOf — правый край компонента размещается слева от указанного компонента
  • android:layout_toRightOf — левый край компонент размещается справа от указанного компонента

Чтобы компоненты «не прилипали» друг к другу, используются атрибуты, добавляющие пространство между ними.

  • android:layout_marginTop
  • android:layout_marginBottom
  • android:layout_marginLeft
  • android:layout_marginRight

Рассмотрим простой пример. Допустим, мы хотим поместить на экран элементы EditText и Button. Кнопка должна находиться справа от текстового поля. Текстовое поле при этом должно быть выравнено слева относительно родительского элемента (компоновки) и слева относительно кнопки. В свою очередь кнопка должна быть выравнена справа относительно шаблона компоновки.

Во многих случаях грамотная относительная компоновка хорошо смотрится в альбомной и портретной ориентации.

Программное создание относительной разметки

Если вам понадобится динамически создавать относительную разметку в коде, то делается это следующим образом:

Создавать компоновку для относительной разметки чуть сложнее, чем для линейной компоновки. Рассмотрим ещё один пример. Предположим, нам нужен такой экран

Шаг 1: В XML-файле задаем относительную компоновку.

Шаг 2: Определяем дочерние элементы. В нашем случае мы имеем семь текстовых меток разного цвета. Каждому элементу присваиваем необходимые свойства: текст, цвет, размер символов и так далее.

Шаг 3: Определяем правила относительной разметки.
Красная метка должна находиться в правом верхнем углу родительского элемента.
Оранжевая метка должна располагаться по центру по горизонтали относительно родительского элемент.
Желтая метка выравнивается по правой части родительского элемента.
Зелёная метка выравнивается по центру (по вертикали) и выводится слева от синей метки.
Синяя метка выравнивается по центру (по вертикали и горизонтали) относительно родительского элемента, т.е. точно по центру.
Метка цвета индиго выравнивается по центру (по вертикали) и выводится справа от синей метки.
Фиолетовая метка выводится в нижней части родительского элемента и занимает всю её ширину.

Читайте также:  Which android one phone is better

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

Создаём неподвижную полоску

С помощью RelativeLayout можно создать неподвижную полоску внизу экрана, которая не будет прокручиваться вместе со списком. Для этого используется атрибут android:layout_alignParentBottom и родственные ему атрибуты для верхней части. Вот простой пример со списком.

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

Источник

Relative Layout — особенности макетов экранов android приложений

Перевод документации официального сайта developer.android.com

RelativeLayout — это view group, которая располагает на экране дочерние view определенным образом относительно других элементов. Позиция каждого view может быть определена как относительно других view (например, слева, справа, сверху или снизу) так и относительно родительской области RelativeLayout (например, выравнивание по верхней, нижней, левой, правой сторонам или по центру).

RelativeLayout — очень мощная утилита для разработки пользовательского интерфейса, поскольку она позволяет сократить количество вложенных view group, тем самым повышая производительность. Если вы используете несколько вложенных групп LinearLayout, вы можете заменить их одним RelativeLayout.

Расположение View

RelativeLayout позволяет дочерним view определять свою позицию относительно родительского view или относительно друг друга (с помощью ID). Таким образом вы можете выровнять два элемента относительно правой границы, или сделать один ниже другого, центрировать, и т. д. По умолчанию все дочерние view устанавливаются в правом верхнем углу layout, так что вы должны указать позицию каждого view используя различные свойства, доступные в RelativeLayout.LayoutParams (смотрите таблицу в конце этой статьи).

Некоторые из свойств макета, доступные view в RelativeLayout:

android:layout_alignParentTop
Делает верхний край этого view совпадающим с верхним краем родителя.

android:layout_centerVertical
Центрирует этот дочерний элемент по вертикали в его родителе.

android:layout_below
Располагает верхний край этого view ниже view, определенного с помощью ID.

android:layout_toRightOf
Располагает левый край этого view правее view, определенного с помощью ID.

Это всего лишь несколько примеров. Все атрибуты макета задокументированы в RelativeLayout.LayoutParams (смотрите таблицу в конце этой статьи).

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

В вашем XML layout, зависимости по отношению к другим view в макете могут быть объявлены в любом порядке. Например, вы можете указать, что «view1» будет расположен ниже «view2«, даже если «view2» — последний элемент, объявленный в иерархии. Пример ниже демонстрирует такой сценарий.

Пример

Каждый из атрибутов, которые контролируют относительное положение view, выделен.

Источник

Основы верстки для нативных андроид приложений

( пользоваться не рекомендуется, deprecated )
AbsoluteLayout — означает что каждый элемент верстки будет иметь абсолютную позицию относительно верхнего левого угла экрана задаваемую с помощью координат x и y. Т.е. верхнийлевый угол экрана при AbsoluteLayout имеет координаты x = 0, y = 0.
Позиция указывается в атрибутах элемента android:layout_x и android:layout_y.
Пример кода:

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

FrameLayout

FrameLayout — тип верстки внутри которого может отображаться только один элемент в строке. Т.е. если внутри FrameLayout вы поместите несколько элементов, то следующий будет отображаться поверх предыдущего.
Пример кода:

LinearLayout

LinearLayout — тип верстки при котором область верстки делится на строки и в каждую строку помещается один элемент. Разбиение может быть вертикальное или горизонтальное, тип разбиения указывается в атрибуте LinearLayout android:orientation. Внутри верстки возможно комбинировать вертикальную и горизонтальную разбивки, а кроме того, возможна комбинация нескольких разных типов верстки например использование LinearLayout внутри FrameLayout.

Пример вертикальной разбивки LinearLayout:

Пример горизонтальной разбивки LinearLayout:

Комбинация нескольких LinearLayout:

RelativeLayout

RelativeLayout — тип верстки при котором позиционирование элементов происходит относительно друг друга и относительно главного контейнера.
За то, каким образом будут позиционироваться элементы отвечают следующие атрибуты:
Атрибуты позиционирования относительно контейнера

  • android:layout_alignParentBottom – Низ элемента находится внизу контейнера
  • android:layout_alignParentLeft – Левая часть элемента прилегает к левой части контейнера
  • android:layout_alignParentRight – Правая часть элемента прилегает к правой части контейнера
  • android:layout_alignParentTop – Элемент находится в верхней части контейнера
  • android:layout_centerHorizontal – Элемент позиционируется по центру относительно горизонтального размера контейнера
  • android:layout_centerInParent – Элемент позиционируется по центру относительно горизонтального и вертикального размеров размера контейнера
  • android:layout_centerVertical – Элемент позиционируется по центру относительно вертикального размера контейнера

Атрибуты позиционирования относительно других элементов.
В качестве значений этих атрибутов ставятся id элемента относительно которого будет производится позиционирование.

android:layout_above – Распологает элемент над указанным
android:layout_below – Распологает элемент под указанным
android:layout_toLeftOf – Распологает элемент слева от указанного
android:layout_toRightOf – Распологает элемент справа от указанного

Выравнивание относительно других элементов.

android:layout_alignBaseline – Выравнивает baseline элемента с baseline указаннго элемента
android:layout_alignBottom – Выравнивает низ элемента по низу указанного элемента
android:layout_alignLeft – Выравнивает левый край элемента с левым краем указанного элемента
android:layout_alignRight – Выравнивает правый край элемента с правым краем указанного элемента
android:layout_alignTop – Выравнивает верхнюю часть элемента в соответствие с верхней частью указанного элемента

TableLayout

TableLayout — табличная верстка.
Организует элементы в строки и столбцы таблицы.
Для организации строк служит таг

Alternate Layouts

Alternate Layouts — альтернативная верстка. Позволяет использовать различную верстку для различных ориентаций экрана.
XML для альтернативной верстки помещается в папки проекта:

res/layout-land – альтернативная верстка для landscape UI
res/layout-port –альтернативная верстка для portrait UI
res/lauout-square – альтернативная верстка для square UI

и перед тем как получить макет из res/lauout система проверяет наличие файлов в этих папках.

И в завершении немного о стилях.

Стили

Во первых стили элемента могут быть описаны в атрибутах самого элемента.
Например:

Кроме того стили можно вынести в отдельный xml файл и сохранить его в папке res/values/
Напимер:

Если мы вынесем стили в отдельный файл, то для описания стилей элемента будем использовать атрибут style.

Источник

Центрировать две кнопки по горизонтали

Я стараюсь расположить две кнопки (с изображениями на них, которые работают отлично) рядом друг с другом и центрировать их по горизонтали. Это то, что у меня есть до сих пор:

К сожалению, они все еще выровнены с левой стороны. Любая помощь приветствуется! Ив

Изменить :

К сожалению, ни один из комментариев или предложений не работает до сих пор. Вот почему я пытаюсь предоставить упрощенный, полный макет теперь с RelativeLayout:

Читайте также:  Как вылечит андроид от вирусов

Я пробовал все комбинации атрибутов в LinearLayout и на элементах Button без везения. Любые другие идеи?

Это мое решение:

Я знаю, что вы уже нашли решение, но вы также можете найти это полезным. Пустой TextView, используемый в качестве центральной ссылки, может удвоиться в качестве дополнения между кнопками, увеличив настройку dip. Он также хорошо переносит изменения ориентации экрана.

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

Если вы ищете быстрое решение RelativeLayout, то работает хорошо. Элемент Dummy View невидим и центрирован по горизонтали. Обе кнопки расположены влево или вправо.

Атрибуты с именем android:layout_foo – LayoutParams – аргументы родителя View. Попробуйте установить android:gravity=»center» на LinearLayout вместо android:layout_gravity . Один из них влияет на то, как LinearLayout будет выкладывать своих детей внутри себя, а другой влияет на то, как родитель LinearLayout должен его лечить. Тебе нужен первый.

Я центрирую две кнопки таким образом:

Я завернул два горизонтальных LinearLayout следующим образом:

Ваши виджеты пользовательского интерфейса здесь

Это похоже на очень старый вопрос, но у меня была такая же проблема. Мне пришлось разместить две кнопки рядом друг с другом в середине экрана (по горизонтали). В итоге я разместил две кнопки внутри линейного макета и разместил линейную компоновку в относительной компоновке с установленным центром тяжести.

ОБНОВЛЕНИЕ: я нашел еще более простое решение:

Это то, что я имел раньше:

Используйте Relatie Layout вместо Linear и установите гравитацию как android: gravity = «center» .

Относительные макеты обеспечивают лучшую производительность и масштабируемость, если вы запускаете приложение с различными размерами.

Следуя примеру XML и результирующего интерфейса:

Это то, что я сделал, я завернул линейный макет с линейным макетом, который имеет гравитацию, установленную в центр_ горизонтальной. Затем я установил ширину линейного макета обернутой в ширину пикселя кнопок в сочетании. В этом примере кнопки имеют ширину в 100 пикселей, поэтому я устанавливаю линейный макет с оболочкой на 200 пикселей.

Я чувствую вашу боль, мне пришлось немного подкорректировать ситуацию и заставить ее работать.

Для меня это работало очень хорошо:

Самый элегантный способ обойти это без введения избыточных компонентов или групп просмотра – использовать интервал. Вы можете использовать элементы пространства с layout_weight в линейном макете, чтобы получить необходимый эффект:

Предоставляя обе элементам пространства равный layout_weight (неважно, каковы веса, он просто принимает их как отношение из итогов всех весов) заставляет элементы пространства занимать дополнительное пространство, которое доступно. Поэтому он заставляет кнопки посередине, у которых нет назначенного им макета, поэтому они не занимают лишнего места, просто то, что они явно указаны (размер изображений).

Это мое решение с использованием relativeLayout:

Используйте RelativeLayout вместо LinearLayout и установите его android_layout:gravity=»center_horizontal» или очень не оптимальный способ – установить android_padding LinearLayout с значениями пикселей, выравнивая их по центру.

Ниже кода выровнят две кнопки в центре по горизонтали, не указывается dp. Так что это будет работать во всей ориентации и на всех экранах.

Источник

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