1. Что такое View?
View это базовый класс для создания элементов пользовательского интерфейса в Android приложении. Представляет из себя прямоугольную область и отвечает за обработку событий (например клика по экрану) и их отображение. UI элементы являются наследниками класса View, например Button, TextView и т.д. Обязательными параметрами у элементов являются ширина android:layout_width и высота android:layout_height.
2. Что такое ViewGroup?
ViewGroup это класс, который наследуется от View. Представляет собой контейнер, предназначенный для хранения в себе других элементов View, например несколько Button и ImageView. Является базовым классом для контейнеров UI элементов, таких как LinearLayout, ConstraintLayout, RecyclerView и т.д.
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/text_id" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="I am a TextView" /> <Button android:id="@+id/button_id" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="I am a Button" /> </LinearLayout>
В примере выше подкласс ViewGroup – контейнер LinearLayout, который содержит в себе несколько наследников класса View – TextView и Button.
У любого объекта может быть связанный с ним целочисленный идентификатор, который служит для обозначения уникальности объекта View в иерархии.
3. Что такое XML?
Extensible Markup Language (XML) – это язык разметки, предназначенный для структурирования, хранения и передачи информации. Язык имеет свой базовый синтаксис, благодаря которому можно размечать текст при помощи обрамляющих тегов, превращая каждое слово или предложение в идентифицируемую, сортируемую информацию. Язык XML не имеет предопределенных тегов.
4. Виды разметки в Android?
В Android SDK имеется несколько типов контейнеров, позволяющие располагать элементы пользовательского интерфейса различными способами. Разметку можно создавать как программно, так и при помощи редактора XML файлов в Android Studio.
Один макет может содержать один или несколько вложенных макетов, но рекомендуется использовать как можно более простую иерархию макетов. Чем меньше в макете вложенных элементов, тем быстрее выполняется его отрисовка, горизонтальная иерархия представлений эффективнее вертикальной.
Основные виды разметки:
– LinearLayout
Разметка, в которой элементы располагаются цепочкой поочередно. При указании параметра android:orientation=”vertical” View элементы располагаются друг под другом вертикально. При указании параметра android:orientation=”horizontal” View элементы располагаются друг за другом горизонтально.
– FrameLayout
Разметка, в которой элементы прикрепляются к верхнему левому углу экрана и их местоположение нельзя изменить. При добавлении нескольких элементов в FrameLayout они будут рисоваться поверх предыдущих, если их размеры совпадают, либо частично перекрывать друг друга.
– ReiativeLayout
Разметка, в которой элементы располагаются относительно родительского компонента или относительно соседних View элементов (по идентификатору элемента).
– ConstraintLayout
Разметка, схожая по принципу с RelativeLayout. У каждого View элемента есть линии, на основании которых View располагается внутри ConstraintLayout. Эти линии (constraints) могут быть привязаны к сторонам самого ConstraintLayout или к сторонам других View внутри ConstraintLayout
– TableLayout
Разметка, в которой элементы располагаются в табличной форме со строками и столбцами. Внутри TableLayout необходимо создавать элементы TableRow, которые будут являться строками и выстраиваться вертикально. Внутри TableRow можно размещать другие элементы, которые будут выстраиваться горизонтально. TableLayout не отображает разделительных линий для их строк, столбцов и ячеек, их необходимо реализовывать самостоятельно. Может иметь строки с разным количеством ячеек.
5. Как создать собственный View элемент?
Есть несколько способов для создания кастомного View:
– Расширить стандартный Android элемент
Например, нам не хватает стандартных возможностей такого View элемента, как Button. Для расширения возможностей мы создаём свой класс и наследуемся от класса android.widget.Button. После чего мы можем переопределять своё поведение для View элемента.
– Наследовать класс от класса View
Данный способ предоставляет нам возможность нарисовать свой собственный UI элемент, наполнить его логикой обработки событий нажатия и т.д.
Рассмотрим методы жизненного цикла View в Android
– Constructor
Создание View начинается с конструктора, с различными входными параметрами, такими как Context, AttributeSet, defStyleAttr и defStyleRes.
– onAttachToWindow()
После вызова данного метода, наша View прикрепляется к нашему Activity и знает о других элементах, которые также находятся на этом экране.
– onMeasure()
Метод определяет ширину и высоту вашего View, подтягивая данные из layout файла. При переопределении данного метода, необходимо указать ширину и высоту Вашего View самостоятельно, используя метод setMeasuredDimension().
– onLayout()
Определяет размер и положение элементов каждого дочернего элемента View, если они имеются.
– onDraw()
Метод отвечает за рисование различных элементов внутри нашего View. Входным параметром метода является объект Canvas, при помощи которого мы и создаем элементы, такие как круг, текст, изображение и т.д.
Для обновления визуальной части нашего View, используется метод invalidate(). Например, мы нарисовали квадрат, и хотим изменить его цвет. Для этого мы вызываем метод invalidate() после чего у нашего View вызывается метод onDraw() и происходит перерисовка нашего квадрата с новым цветом.
В случае, если у нашего View были изменены размеры, необходимо вызвать метод requestLayout(), после которого последует вызов методов, согласно жизненному циклу нашего View, т.е. onMeasure() → onLayout() → onDraw().