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 – для каждого элемента настраивается его положение относительно других элементов.

Виды отношений:

  1. слева, справа, сверху, снизу указанного элемента (layout_toLeftOf, layout_toRightOf, layout_above, layout_below)

  2. выравненным по левому, правому, верхнему, нижнему краю указанного элемента (layout_alignLeft, layout_alignRight, layout_alignTop, layout_alignBottom)

  3. выравненным по левому, правому, верхнему, нижнему краю родителя (layout_alignParentLeft, layout_alignParentRight, layout_alignParentTop, layout_alignParentBottom)

  4. выравненным по центру вертикально, по центру горизонтально, по центру вертикально и горизонтально относительно родителя (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.