Ресурс макету програми визначає архітектуру для візуального інтерфейсу дії (activity), або його компоненту.
Рекомендуємо також для прочитання статтю "Перша програма “Привіт, Світ!” на Android".
Розміщення файлу
res/layout/filename.xml
Компільований тип ресурсу
Вказівник ресурсу на об'єкт View (або потомок).
Посилання на ресурси
у Java: R.layout.filename
у XML: @[пакет:]макет/ім'я_файлу
Синтаксис
<?xml version="1.0" encoding="utf-8"?>
<ViewGroup xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@[+][пакет:]id/ім'я_ресурсу"
android:layout_height=["dimension" | "fill_parent" | "wrap_content"]
android:layout_width=["dimension" | "fill_parent" | "wrap_content"]
[атрибути специфічні для ViewGroup] >
<View
android:id="@[+][пакет:]ідентифікатор/ім'я_ресурсу"
android:layout_height=["dimension" | "fill_parent" | "wrap_content"]
android:layout_width=["dimension" | "fill_parent" | "wrap_content"]
[специфічні атрибути для View] >
<requestFocus/>
</View>
<ViewGroup >
<View />
</ViewGroup>
<include layout="@layout/ресурс_макету"/>
</ViewGroup>
Кореневим елементом можуть бути: ViewGroup, View або елемент <merge>, але повинен бути тільки один кореневий елемент і він повинен містити атрибут xmlns:android з показаним простором імен android.
Елементи
<ViewGroup>
Контейнер, який містить елементи View. Існує велика кількість об'єктів ViewGroup і кожен дозволяє вам вказувати на макети дочірніх елементів різним шляхом. Різні типи об'єктів ViewGroup включають LinearLayout, RelativeLayout i FrameLayout. Атрибути:
- android:id. Унікальний ідентифікатор ресурсу для елементу, який
ви можете використовувати для отримання посилання для елементу ViewGroup вашої програми.
- android:layout_height. Містить розмір або ключове слово (“fill_parent” або “wrap_content”). Даний елемент обов'язковий.
- android:layout_width. Містить розмір або ключове слово (“fill_parent” або “wrap_content”). Даний елемент обов'язковий.
Даний елемент може містити більше атрибутів, які підтримуються у базовому класі ViewGroup, і набагато більше підтримується кожною реалізацією потомка ViewGroup.
<View>
Індивідуальний компонент інтерфейсу, зазвичай визначений як “віджет”. Доступні типи об'єктів View включають наступні: TextView, Button, CalendarView, DatePicker, EditText, ListView, ImageView, ImageButton, CheckBox і багато інших. Атрибути:
- android:id. Ідентифікатор ресурсу. Унікальне ім'я ресурсу для даного елементу, яке ви можете використати для отримання посилання на об'єкт View з коду вашої програми.
- android:layout_height. Містить розмір або ключове слово (“fill_parent” або “wrap_content”). Даний елемент обов'язковий.
- android:layout_width. Містить розмір або ключове слово (“fill_parent” або “wrap_content”). Даний елемент обов'язковий.
Так само, як для попереднього елементу, даний підтримує велику кількість атрибутів, які призначені для різних реалізацій потомків класу View (TextView, Button і т.д.).
<requestFocus>
Будь-який елемент, який представляє об'єкт View може включати даний елемент, що дає змогу отримати початковий фокус користувача.
<inlude>
Включає файли макетів у даний файл. Атрибути:
- layout. Ресурс макету. Даний атрибут обов'язковий. Посилання на ресурс макету.
- android:id. Ідентифікатор ресурсу. Перезаписує ідентифікатор наданий для кореневого елементу підключеного макету.
- android:layout_height. Містить розмір або ключове слово (“fill_parent” або “wrap_content”).
- android:layout_width. Містить розмір або ключове слово (“fill_parent” або “wrap_content”).
Ви також можете включати будь-які інші атрибути у елемент <include>, які підтримуються кореневим елементом у підключеному макеті і які перезапишуть дані атрибути кореневого елементу (для того щоб дані зміни вступили в силу, вам також необхідно перевизначити атрибути layout_height i layout_width).
<merge>
Альтернативний кореневий елемент, який не малюється на ієрархії макету. Його використання як кореневого елементу корисне, коли ви знаєте, що цей макет буде розміщено у інший макет, який вже містить відповідний кореневий елемент. Тобто даний макет буде обов'язково включатись у інший макет.
Значення для атрибуту android:id
Для значення даного атрибуту, вам зазвичай необхідно використовувати наступний синтаксис: “@+ідентифікатор/ім'я”. Символ “+” означає, що це є новий ідентифікатор ресурсу і утиліта aapt створить новий цілочисельний ідентифікатор у класі R.java, якщо він ще не існує. Приклад:
<TextView android:id="@+id/nameTextbox"/>
Ім'я nameTextbox тепер являється ідентифікатором ресурсу, який призначений для даного елементу. Ви можете посилатись на даний TextView за допомогою:
findViewById(R.id.nameTextbox) ;
Даний код повертає об'єкт TextView.
Однак, якщо ви вже визначили ідентифікатор ресурсу (і воно ще не використано), тоді ви можете застосувати даний ID до елементу View, виключаючи символ плюс з значення атрибуту android:id.
Значення для android:layout_height i android:layout_width
Значення висоти і ширини можуть бути виражені використовуючи будь-які одиниці розміру, які підтримуються системою Android (px, dp, sp, pt, in, mm) або одним з наступних ключових слів:
- match_parent: Встановлює розміри, які співпадають з розміром батьківського елементу.
- fill_parent: Встановлює розміри які співпадають з батьківським елементом.
- wrap_content: Встановлює необхідні розміри для обгортання контенту даного елементу.
Елементи визначені користувачем
Ви можете створити ваші власні елементи View i ViewGroup і застосувати їх до ваших макетів, в якості стандартних. Ви також можете вказати атрибути, які підтримуються у елементі XML.
Приклад
Наступний XML файл необхідно зберегти у файлі res/layout/main_activity.xml відносно кореневого каталогу проекту вашої програми
<?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"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a TextView" />
<Button android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Привіт, я кнопка!" />
</LinearLayout>
Даний код програми завантажить макет для об'єкту Activity у методі onCreate():
public void onCreate (Bundle savedInstanceState)
{
super.onCreate (savedInstanceState) ;
setContentView (R.layout.main_activity) ;
}
Рекомендуємо також для прочитання статтю "Перша програма “Привіт, Світ!” на Android".