- RelativeLayout
- Программное создание относительной разметки
- Создаём неподвижную полоску
- Relative Layout — особенности макетов экранов android приложений
- Расположение View
- Пример
- Android Layouts: обзор RelativeLayout и LinearLayout
- Обзор XML макетов (Android Layouts)
- Основные макеты в Android:
- Android Layouts: атрибуты XML макета/компоновки
- Макет LinearLayout в Android
- Макет RelativeLayout в Android
- По отношению к родительскому элементу
- По отношению к соседним элементам
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: Определяем правила относительной разметки.
Красная метка должна находиться в правом верхнем углу родительского элемента.
Оранжевая метка должна располагаться по центру по горизонтали относительно родительского элемент.
Желтая метка выравнивается по правой части родительского элемента.
Зелёная метка выравнивается по центру (по вертикали) и выводится слева от синей метки.
Синяя метка выравнивается по центру (по вертикали и горизонтали) относительно родительского элемента, т.е. точно по центру.
Метка цвета индиго выравнивается по центру (по вертикали) и выводится справа от синей метки.
Фиолетовая метка выводится в нижней части родительского элемента и занимает всю её ширину.
При разработке макета с относительной разметкой следите, чтобы элементы не налезали друг на друга (можете получить сообщение об ошибке). Старайтесь не усложнять макет и не забывайте присваивать уникальный идентификатор каждому элементу. Проверяйте макет в разных режимах ориентации.
Создаём неподвижную полоску
С помощью 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, выделен.
Источник
Android Layouts: обзор RelativeLayout и LinearLayout
В этой статье мы ударимся в теорию и рассмотрим основные блоки для построения пользовательского интерфейса: рассмотрим различные XML макеты (компоновки) в Android, основательно разберемся с RelativeLayout и LinearLayout .
Эта статья является хорошей шпаргалкой по работе с Android Layouts, а именно с компоновкой RelativeLayout и LinearLayout .
Обзор XML макетов (Android Layouts)
В Android основным строительным блоком пользовательского интерфейса является объект View , который по умолчанию он занимает прямоугольную область на экране. Этот объект является экземпляром одноименного класса View и базовым классом для всех компонентов пользовательского интерфейса, например: TextView, Button, EditText и другие.
Также есть класс ViewGroup , который является подклассом View . Один или несколько View могут быть сгруппированы в ViewGroup . Этот класс обеспечивает компоновку, вид и последовательность View . Примерами ViewGroup являются LinearLayout , RelativeLayout , о которых мы сегодня и поговорим.
Основные макеты в Android:
- RelativeLayout — это ViewGroup , который определяет положение дочерних View относительно друг друга.
- LinearLayout — это ViewGroup , который определяет расположение всех дочерних элементов: по вертикали или по горизонтали.
- AbsoluteLayout позволяет указать точное положение дочерних View .
- TableLayout рассматривает дочерние элементы в виде строк и столбцов.
- GridView — разновидность ViewGroup , в котором элементы представлены в двумерной сетке с прокруткой. Элементы в GridView попадают из назначенного экземпляра ListAdapter .
- FrameLayout заполняет собой экран для отображения единственного View .
- ListView — набор View , который можно скроллить (прокручивать).
- Scrollview — разновидность FrameLayout , позволяющая просматривать элементы пользовательского интерфейса даже если они не видны на первом экране. Это происходит с помощью скроллинга (пользователь прокручивает экран для полной видимости содержимого). Scrollview может содержать только один вид дочерний View и же макет ViewGroup .
Android Layouts: атрибуты XML макета/компоновки
- android:id — это идентификатор, который однозначно идентифицирует элемент View
- android:layout_width — ширина макета
- android:layout_height — высота макета
- android:layout_margin — дополнительное пространство за пределами элемента View .
- android:layout_padding определяет дополнительное пространство внутри элемента View .
- android:layout_gravity определяет расположение дочернего View .
- android:layout_weight определяет дополнительного пространства для View .
- android:layout_x определяет координаты макета по оси Ox
- android:layout_y определяет координаты макета по оси Oy
Атрибут android:layout_width=»wrap_content» указывает, что View должно занять ровно столько места по ширине, сколько занимает его содержимое.
Атрибут android:layout_width=» match_parent» указывает, что View должно занять ровно столько места по ширине, сколько занимает его родительский элемент.
В этом уроке мы рассмотрим два наиболее популярных в разработке под Android макета:
Макет LinearLayout в Android
- Макет LinearLayout в Android группирует элементы в одну линию. В разметке макета указываем атрибут android:orientation , который определяет тип размещения: по вертикали или по горизонтали. По умолчанию стоит значение по горизонтали.
- Значение «по вертикали» в LinearLayout означает только один дочерний элемент в строке, а «по горизонтали» означает одну сплошную строку элементов на экране.
- Атрибут android:layout_weight указывает важность элемента. Элемент с большим весом занимает больше места на экране.
Макет RelativeLayout в Android
Макет RelativeLayout определяет положение дочерних View относительно друг друга. Дочерние элементы в RelativeLayout определяют свое положение с помощью специальных атрибутов: toLeftOf , toRightOf , below , above . Например, мы явно указываем, что один элемент View должен быть toLeftOf (слева от) другого элемента View .
Мы также можем позиционировать View по отношению к своему родительскому элементу RelativeLayout , например, layout_centerHorizontal — элемент должен быть выравнен по горизонтали и быть по центру. Если ни один из атрибутов для позиционирования не указан, то View будет определен по умолчанию — в левом верхнем углу родительского элемента.
Ниже перечислены основные атрибуты макета RelativeLayout по трех различных категориях позиционирования:
По отношению к родительскому элементу
- android:layout_alignParentBottom — в нижней части родительского элемента (родителя/родительского контейнера)
- android:layout_alignParentLeft устанавливает элемент в левой части родительского элемента
- android:layout_alignParentRight устанавливает элемент в правой части родительского элемента
- android:layout_alignParentTop устанавливает элемент в верхней части родителя
- android:layout_centerHorizontal центрирует элемент по горизонтали внутри родительского контейнера
- android:layout_centerInParent центрирует элемент по горизонтали и по вертикали внутри родительского контейнера (по центре экрана)
- android:layout_centerVertical центрирует элемент по вертикали в пределах родительского контейнера
По отношению к соседним элементам
- Атрибут android:layout_above устанавливает элемент выше указанного элемента
- Атрибут android:layout_below устанавливает элемент ниже указанного элемента
- Атрибут android:layout_toLeftOf устанавливает элемент слева от указанного элемента
- Атрибут android:layout_toRightOf устанавливает элемент справа от указанного элемента
Следует отметить, что элемент устанавливается относительно другого элемента по его id. Это делается с помощью конструкции « @id/уникальныйИдентификаторЭлемента «, например:
Источник