Экнш onCreate запускает на выполнение представление из файла res/layout/activity_main.xml. Это главный файл представления, и в нем определяется относительное расположение компонентов.
За расположение элементов на экране отвечают виджеты и атрибуты виджетов.
Сперва рассмотрим основные виды Layout, т. к. эти виджеты являются корневыми:
LinearLayout. Отображает view-элементы ввдите одной строки, если он Horizontal и ввиде одного столбца, если он Vertical.
TableLayout. Отображает элементы ввиде таблицы по строкам и столбцам.
RelativeLayout. Для каждого элемента настраивается его положение относительно других элементов.
AbsoluteLayout. Для каждого элемента настраивается его явная позиция в системе координат по x и y.
FrameLayout.
Каждый из этих элементов может располагаться внутри другого, а также содержать множество других view-элементов.
View-элементы
Создать любой виджет можно и не зная его кода. Для этого нужно кликнуть по его названию в панели виджетов.
Чтобы сгенерировать идентификатор ресурса для виджета, необходимо добавить для него атрибут adnroid:id.
Добавление идентификатора ресурса для виджета. Листинг 1. |
android:layout_width="wrap_content" |
Обратите внимание на знак +, присутствующий в значениях android:id. Это значит, что мы создаем идентификаторы. В атрибуте android:text мы ссылаемся на уже созданный ранее в строковом файле идентификатор с именем myid.
Когда виджетам назначены идентификаторы ресурсов, к ним можно обращаться в классах активностей. Для этого используется метод Activity.
public View findViewById(int id);
Метод получает идентификатор ресурса виджета и возвращает объект View.
Обращение к виджетам в классе активности. Листинг 1. |
public class MainActivity extends AppCompatActivity { private Buttom mTrueButtom; @override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); mTrueButtom = (Buttom) findViewById(R.id.buttom); setContent(R.layout.activity_main); } } |
Layout_width и Layout_height – для определения ширины и высоты. Используются следующие единицы измерения:
dp (density-independent pixels) – абстрактная единица измерения, позволяющая приложениям выглядеть одинаково на различных экранах и разрешениях.
sp (scale-independent pixels) – то же, что и dp, но используется для размеров шрифта в View элементах.
pt – 1/72 дюйма, определяется по физическому размеру экрана. Эта единица измерения из типографии.
mm – миллиметр, определяется по физическому размеру экрана.
in – дюйм, определяется по физическому размеру экрана.
Кроме единиц измерения, используются следующие значения:
match_parent (fill_parent) – означает, что элемент займет всю доступную ему ширину или высоту в родительском элементе.
wrap_content – ширина или высота контейнера определяется его содержимым.
Layout_gravity – используется для выравнивания. Возможны варианты: top, bottom, left, right, center.
Layout_margin – используется для определения отступов.
Textstyle – используется для определения стиля тектста. Возможны следующие значения.
normal;
bold;
italic.
Пример установки стиля через атрибуты:
android:textStyle="bold";
Рассмотрим преобразованный файл представления activity_main.xml.
Файл activity_main.xml. Листинг 1. |
xml version="1.0" encoding="utf-8"?> android:layout_gravity="bottom|right" |
Открывающий тег XML устанавливает различные атрибуты RelativeLayout, в частности кодировку и версию приложения.
атрибут xmlns, который указывает все элементы в документе, относящиеся к пространству имен android XML. Этот атрибут обязателен для указания и автоматически генерируется IDE при создании любого файла XML-разметки.
RelativeLayout является корневым узлом документа XML. Значение match_parent для атрибутов android:layout_width и android:layout_height. В результате макет занимает всю высоту и ширину родительского элемента макета (элемента, в который вложен данный макет).
Атрибут android:id = ‘@+id/Main’ предназначен для присвоения уникального id элементу.
Атрибут android:text = ‘@string/name’ выводит переменные из файла strings.xml.
Атрибут android:entries = ‘@array/category’ элемента spinner обращается к массиву category.