2. Элементы экрана и их свойства - kpb90/start_android GitHub Wiki
Элементы экрана
Приложение состоит из окон, называемых Activity. В конкретный момент времени обычно отображается одно Activity. Содержимое Activity формируется из различных компонентов, называемых View. View - это кнопка, поле ввода, чекбокс... View обычно размещаются в ViewGroup.
Самый распространенный пример ViewGroup – это Layout. Layout отвечает за то, как будут расположены его дочерние View на экране (таблицей, строкой, столбцом …) res > layout > activity_main.xml - это layout-файл, в нем определяется набор и расположение элементов View.
Виды Layouts. Ключевые отличия и свойства.
Расположение View-элементов на экране зависит от ViewGroup (Layout).
LinearLayout – отображает View-элементы в виде одной строки (если он Horizontal) или одного столбца (если он Vertical).
TableLayout – отображает элементы в виде таблицы, по строкам и столбцам. TL состоит из строк TableRow (TR). Каждая TR содержит View-элементы, формирующие столбцы. Т.е. кол-во View в TR - это кол-во столбцов. Если в разных TR разное кол-во View-элементов (столбцов), то общее кол-во определяется по TR с максимальным кол-вом. Ширина столбца определяется по самому широкому элементу из этого столбца. TL может содержать не только TR, но и обычные View. Если добавить Button прямо в TL, а не в TR то она растянется на ширину сей таблицы.
RelativeLayout – для каждого элемента настраивается его положение относительно других элементов.
Виды отношений:
-
слева, справа, сверху, снизу указанного элемента (layout_toLeftOf, layout_toRightOf, layout_above, layout_below)
-
выравненным по левому, правому, верхнему, нижнему краю указанного элемента (layout_alignLeft, layout_alignRight, layout_alignTop, layout_alignBottom)
-
выравненным по левому, правому, верхнему, нижнему краю родителя (layout_alignParentLeft, layout_alignParentRight, layout_alignParentTop, layout_alignParentBottom)
-
выравненным по центру вертикально, по центру горизонтально, по центру вертикально и горизонтально относительно родителя (layout_centerVertical, layout_centerHorizontal, layout_centerInParent)
android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/entry"
- слово android в названии каждого аттрибута – это namespace
- layout_width (ширина элемента) и layout_height (высота элемента) могут задаваться в асболютных значениях, а могут быть следующими: match_parent = fill_parent wrap_content
У View-элемента может не быть ID (android:id).
AbsoluteLayout – для каждого элемента указывается явная позиция на экране в системе координат (x,y)
Layout параметры для View элементов.
Пример: HTC Desire. Диагональ = 3,7 дюйма, разрешение = 800х480 пикселов. dpi (dot per inch) - кол-во пикселов в одном дюйме
dp или dip - Density-independent Pixels. sp - Scale-independent Pixels. То же, что и dp, только используется для размеров шрифта в View элементах pt - 1/72 дюйма, определяется по физическому размеру экрана. Эта ЕИ из типографии. px – пиксел, не рекомендуется использовать т.к. на разных экранах приложение будет выглядеть по-разному. mm – миллиметр, определяется по физическому размеру экрана in – дюйм, определяется по физическому размеру экрана
in, mm и pt – неизменны относительно друг друга. Всегда 1 in = 25,4 mm и 1 in = 72 pt.
Для того чтобы на разных разрешениях приложение выглядело похожим рекомендуется использовать dp (и sp). Его можно определить, как масштабируемый px. За степень масштабируемости отвечает Screen Density - используется системой для вычисления значения dp.
На текущий момент есть 5 значений этого коэффициента:
- low (ldpi) = 0,75
- medium (mdpi) = 1
- tv (tvdpi) = 1,33
- high (hdpi) = 1,5
- extra high (xhdpi) = 2
КОНСТАНТЫ
Layout weight
Если у нас родитель содержит несколько элементов и мы хотим, чтобы они заняли все пространство необходимо использовать параметр Layout weight – вес. Свободное пространство распределяется между элементами пропорционально их weight-значениям.
Layout gravity
Параметр layout_gravity аналогичен выравниванию из Word. android:layout_gravity="top|left" android:layout_gravity="bottom|left" android:layout_gravity="bottom|right" android:layout_gravity="center"
Layout margin
Параметры margin полностью аналогичны margin из html.