3.1. Общая информация про виджеты и их атрибуты

3.1. Общая информация про виджеты и их атрибуты

Файлы макетов

Разметка макетов Activity пишется на языке XML, в языке XML используются теги и атрибуты дополняющие теги различными параметрами. Например:

<TextView android:layout_width="100dp"/> добавляет виджет TextView и устанавливает в качестве его атрибута ширины значение 100dp (100 пикселей). Тут TextView это название тега а android:layout_width это атрибут тега TextView.

Пространства имен

В макетах XML используются пространства имён, которые пишутся до их использования внутри корневого тега макета, пишутся как атрибут xmlns:android="http://schemas.android.com/apk/res/android". xmlns: означает объявление пространства имён (XML namespace), android это название префикса который применяется к атрибутам виджетов.

Виджеты наследуют класс View от которого получают основные атрибуты и дополняют своими. Например у всех виджетов должны быть указаны атрибуты layout_width и layout_height, потому что операционная система должна знать какой размер виджетов для правильного расположения их в контейнере.

Значения атрибутов указываются так: android:layout_width="wrap_content"

Часто используемые атрибуты

android:id - устанавливает уникальный идентификатор для использования виджета через код Java (View v = findViewById(R.id.myid)) или адресации внутри макета (например при использовании ConstraintLayout). При установлении значения id используется @+id/myid, при использовании id другого объекта используется @id/myid, знак + при использовании уже установленного id не используется. Например app:layout_constraintRight_toRightOf="@id/myid"

android:layout_width - обязательный атрибут для установки ширины виджета

android:layout_height - обязательный атрибут для установки высоты виджета Для атрибутов android:layout_width и android:layout_height можно установить значения wrap_content, match_parent, 100dp, 200dp.

  • wrap_content - установить размер равный занимаемому содержимому виджета или контейнера виджетов.
  • match_parent - установить размер равный ширине и/или высоте родительского блока
  • 100dp, 200dp - установить размер в dp - density independent pixels, пиксели которые физически занимают одинаковый размер на экранах устройств независимо от плотности их экранов

android:layout_margin - устанавливает одинаковый внешний отступ (пустое пространство) со всех сторон блока относительно других блоков или родительского контейнера. Значения можно указать в dp. android:layout_marginLeft, android:layout_marginRight, android:layout_marginTop, android:layout_marginBottom - устанавливают внешний отступ с указанной стороны. Слева, справа, сверху, снизу соответственно.

android:padding - устанавливает внутренний отступ со всех сторон, разница заметна при установке фона для виджета, потому что при использовании данного атрибута пустое пространство добавляется внутри рамки виджета а внешние стороны рамки остаются прижатыми к соседним объектам или сторонам родительского контейнера.android:paddingLeft, android:paddingRight, android:paddingTop, android:paddingBottom - устанавливает внутренний отступ с указанной стороны.

android:layout_gravity - выравнивание внутри родительского контейнера. Работает, если родительский контейнер не использует авторасположение дочерних объектов как LinearLayout, ConstraintLayout. Работает горизонтальное выравнивание виджета при использовании внутри LinearLayout с вертикальной ориентацией и вертикальное выравнивание использовании внутри LinearLayout с горизонтальной ориентацией. Работает по обеим осям например в контейнере FrameLayout. Если контейнер использует авторасположение дочерних объектов можно установить атрибут android:gravity с необходимым значением в родительском объекте. Например:

android:gravity - выравнивание содержимого (текста или дочерних объектов)

Допустимые значения для layout_gravity и gravity:

  • left - по левому краю;
  • right - по правому краю;
  • top - по верхней границе;
  • bottom - по нижней границе;
  • center_vertical - центрировать по вертикали;
  • center_horizontal - центрировать по горизонтали;
  • center - центрировать и по вертикали и по горизонтали; Можно использовать сразу два значения выравнивания, выделяя одно значение от другого вертикальной чертой |: android:gravity="bottom|right"

 

android:background - устанавливает цвет фона виджета. Значениями могут быть значения цветов в шестнадцатеричной системе (0 до F) указываемых после # или значения хранящиеся в файле colors.xml в папке res/values.  Допустимо указывать android:background="#00FF0000"или android:background="@color/colorPrimary" Подробней о цветах внизу.

Шестнадцатеричные значения цветов

Для указывания цвета используется 4 канала: альфа (прозрачность), красный, зеленый, синий или 3 канала: красный, зеленый, синий. Можно указывать 3, 4, 6, 8 символов. Смешивая три цвета образуем необходимый цвет. Каждая группа может иметь по 2 символа от 00 до FF при использовании 6-и и 8-ми значных значений цвета и по 1 символу 0 до F при использовании 3-х или 4-х значных значений цвета.

  • При указании 3 или 6 символов значение прозрачности не учитывается. Например #000 - черный цвет и #000000 - черный.
  • При вводе 4 значных значений цвета первый символ и при вводе 8 значных значений первые два символа устанавливают прозрачность - 0 или 00 непрозрачно и F или FF полностью прозрачно и все промежуточные значения делают частично прозрачным. Значение android:background="#afc10000" устанавливает полупрозрачный красный цвет в качестве фонового цвета
  • Необходимый цвет можно сохранить в файле colors.xml, например <color name="mycolor">#4aab8b</color> и потом при указании атрибутов для указания цвета использовать название присвоенное атрибуту name тега color, например <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Text" android:textColor="@color/mycolor"/>, значение цвета текста TextViewтеперь установлено равным значению #4aab8b, но значение цвета получается через название переменной сохранённой в файле colors.xml