Назад Зміст Вперед

6.2. Прості Android-проекти із використанням текстів та кнопок

Створення лінійного макета

Відкрийте fragment_main.xml файл з res/layout/ каталогу.

Примітка: В Eclipse, коли ви відкриваєте файл макета, вам спочатку відкриється редактор графічних макетів. Це редактор, який допоможе вам побудувати макети з використанням WYSIWYG інструментів. Натисніть fragment_main.xml вкладку в нижній частині екрана, щоб відкрити XML редактор.

Шаблон BlankActivity, який ви вибрали при створенні цього проекту, включає в себе fragment_main.xml файл з RelativeLayout поданням верхнього рівня і TextView дочірнім поданням.

Спочатку видаліть <TextView> елемент і змініть <RelativeLayout> елемент на <LinearLayout>. Потім додайте android:orientation атрибут і встановіть його в "horizontal".

Результат виглядає наступним чином:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal" >
    </LinearLayout>

LinearLayout являє собою групу View (підклас ViewGroup), який розкладає дочірні View в вертикальному або горизонтальному положенні, як зазначено в android:orientation атрибуті. Кожен дочірній елемент LinearLayout з'являється на екрані в тому порядку, в якому він з'являється в XML.

Два інших атрибута, android:layout_width і android:layout_height, потрібні для всіх View для того, щоб вказати їх розмір.

Оскільки LinearLayout є коренем в макеті, він повинен заповнити всю область екрану, яка доступна для додатка, встановивши ширину і висоту в "match_parent". Це значення вказує, що подання має розширити свою ширину або висоту до відповідності ширини або висоти батьківського View.

Для отримання додаткової інформації про властивості макета, див. Макет.

Додавання текстового поля

Щоб створити текстове поле, що редагується користувачем, додайте <EditText> елемент всередині <LinearLayout>.

Як і будь-якому View об'єкту, необхідно задати певні XML атрибути для вказівки EditText властивостей об'єкта. Ось як ви повинні оголосити його в <LinearLayout> елементі:

<EditText android:id="@+id/edit_message"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:hint="@string/edit_message" />

Про об'єкти ресурсів

Об'єкт ресурсу це просто унікальне ціле ім'я, яке асоціюється з ресурсом додатка, таким як растрове зображення, файл макета або рядки.

Кожен ресурс має відповідний об'єкт ресурсу, визначений у вашому проекті в gen/R.java файлі. Ви можете використовувати імена об'єктів в класі для позначення ваших ресурсів, наприклад, коли необхідно вказати значення рядка для android:hint атрибуту. Ви також можете створювати довільні ідентифікатори ресурсів, які ви будете асоціювати з поданням за допомогою android:id атрибута, який дозволяє посилатися на це поданням з іншого коду.

Інструменти SDK створюють R.java щоразу при компіляції вашої програми. Ви ніколи не повинні змінювати цей файл вручну. Надання ресурсів.

Про ці атрибути:android:id Він забезпечує унікальний ідентифікатор для подання, який можна використовувати для посилання на об'єкт з коду програми для читання і маніпулювання об'єктом (ви побачите це в наступному уроці). Знак «собачки» ( @) потрібно, коли ви посилаєтеся на будь-який об'єкт ресурсу з XML. За ним слідує тип ресурсу ( idв даному випадку), коса риска, а потім ім'я ресурсу ( edit_message). Знак плюс ( +) перед типом ресурсу потрібно тільки тоді, коли ви визначаєте ідентифікатор ресурсу вперше. При компіляції програми, інструменти SDK використовують цей ім'я ідентифікатора ресурсу для створення нового ідентифікатора ресурсу в вашому проекті в gen/R.java файлі, який належить до EditText елементу. Після того, як ідентифікатор ресурсу оголошується один раз таким чином, інші посилання на нього не вимагають знака плюс. Використовувати знак плюс необхідно тільки при вказівці нового ідентифікатора ресурсу, але не потрібно для конкретних ресурсів, таких як рядки або макети. Див. Виноску для отримання додаткової інформації про об'єкти ресурсів. android:layout_width і android:layout_height Замість того щоб використовувати конкретні розміри по ширині і висоті, "wrap_content"вказує, що подання має бути великим на стільки, щоб вмістити вміст уявлення. Якби ви використовували замість нього "match_parent", то EditText елемент заповнив би весь екран, тому що це б відповідало розміру батьківського LinearLayout. Для отримання додаткової інформації див. Макетиandroid:hint Це рядок за замовчуванням для відображення, коли текстове поле пусте. Замість використання жорстко запрограмованої рядки в якості значення, "@string/edit_message"значення посилається на ресурс рядки, визначений в окремому файлі. Оскільки це відноситься до конкретного ресурсу (це не просто ідентифікатор), йому не потрібно вказувати знак плюс. Проте, тому що ви ще не визначили строковий ресурс, ви побачите помилку компілятора на цьому етапі. Ви виправите це в наступному розділі, визначивши рядок.

Примітка: Цей строковий ресурс має те ж ім'я, що і елемент ідентифікатора: edit_message. Однак, посилання на ресурси завжди об'єднані за типом ресурсів (таких як id або string), тому використання такого ж імені не викликає колізій.

Додавання рядкових ресурсів

Щоб додати текст в призначений для користувача інтерфейс, треба вказати кожен рядок як ресурс. Рядкові ресурси дозволяють управляти всім текстом призначеного для користувача інтерфейсу в одному місці, що дозволяє його легше знайти і оновити текст. Використання зовнішніх ресурсів для рядків також дозволяє локалізувати додаток різними мовами, надаючи альтернативні визначення для кожного рядкового ресурсу.

За замовчуванням, Android проект включає в себе файл рядкових ресурсів res/values/strings.xml. Додайте новий рядок з ім'ям "edit_message"і задайте їй значення «Enter a message».Поки ви перебуваєте в цьому файлі, також додайте рядок «Send» для кнопки, яку ви скоро додасте, звану "button_send".

В результаті strings.xml виглядає наступним чином:
<?xml version="1.0" encoding="utf-8"?>
<resources>
        <string name="app_name">My First App</string>
        <string name="edit_message">Enter a message</string>
        <string name="button_send">Send</string>
        <string name="action_settings">Settings</string>
        <string name="title_activity_main">MainActivity</string>
</resources>

Додавання кнопки

Тепер додайте <Button> в макет, відразу після <EditText> елемента:
<Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/button_send" />
Висота і ширина встановлені в "wrap_content", тому кнопка буде такого розміру, щоб вмістити текст кнопки. Цій кнопці не потрібен android:id атрибут, тому що на неї не будуть посилатися.

Зробити поле введення за шириною екрану

Це можна зробити всередині LinearLayout за допомогою weight властивості, яке можна вказати за допомогою android:layout_weight атрибута.
<EditText
            android:layout_weight="1"
            ... />
Установка ширини в нуль підвищує продуктивність макета, тому що використання "wrap_content"в якості ширини вимагає від системи обчислення ширини, яка в кінцевому рахунку не має значення.
<EditText
            android:layout_weight="1"
            android:layout_width="0dp"
            ... />
Файл макета повинен виглядати так:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal">
        <EditText android:id="@+id/edit_message"
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:hint="@string/edit_message" />
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/button_send" />
    </LinearLayout>
Цей макет застосовується за умовчанням до Activity класу, який інструменти SDK згенерували при створенні проекту, так що тепер ви можете запустити додаток, щоб побачити результати:
  • В Eclipse, виберіть пункт Run на панелі інструментів.
  • Або з командного рядка, перейдіть в кореневий каталог вашого Android проекту, і виконайте:
ant debug
    adb install bin/MyFirstApp-debug.apk


.