ВСТУП
Людські потреби бути завжди в курсі справ виводять інформаційні технології на пряму лінію по створенню всіх нових пристроїв і гаджетів. Незручність експлуатації комп'ютерів і ноутбуків спричиняє появу різних міні- комп'ютерів, смартфонів та комунікаторів, в основі яких лежить усе та ж операційна система. Лідируючі позиції на сьогоднішній день займають платформи Android і iPhone. Але ці платформи можуть працювати повноцінно тільки при одній умові - якщо для них буде здійснюватися розробка мобільнихдодатків.
Метою курсу “ Програмування малих та мобільних платформ ” є набуття навиків створення сучасних мобільних додатків високої якості, знайомство з сучасними середами та мовами розробок програмного забезпечення для мобільних пристроїв, вміння правильно та ефективно тестувати розроблені мобільні додатки.
Звіт з лабораторної роботи повинен містити: тему;
мету;
текстовий та графічний матеріал розробки; висновки.
Під час співбесіди при захисті лабораторної роботи студент повинен виявити знання по теоретичному матеріалу, про методи виконання кожного етапу роботи, по змісту основних розділів оформленого звіту з демонстрацією результатів на конкретних прикладах. Студент повинен вміти правильно аналізувати отримані результати. Для самоперевірки при підготовці до виконання і захисту роботи студент повинен відповісти на контрольні запитання, наведені наприкінці опису відповідноїроботи.
ЛАБОРАТОРНА РОБОТА №1.
ОЗНАЙОМЛЕННЯ З АРХІТЕКТУРОЮ МОБІЛЬНОГО ДОДАТКУ
Мета: створення середи розробки мобільного додатку на базі Android, створення екземпляру емулятору мобільного пристрою; вивчення структуру, принципів роботи та інсталяція додатку на емулятор та мобільний пристрій.
Короткі теоретичні відомості
Створення середирозробки
Для розробки додатків на платформі Android необхідно завантажити та встановити наступне програмне забезпечення, доступне для вільного завантаження:
1. Java Development Kit (JDK) – комплект розробника додатків мовою Java, що включає в себе компілятор Java (javac), стандартні бібліотеки класів Java, приклади, документацію, різні утиліти і середовище виконання Java Runtime Environment, JRE (доступнедлязавантаженнязаадресою:http://java.sun.com/javase/downloads/index.jsp).
2. Eclipse IDE – інтегроване середовище розробки для Java, що має можливість установки плагіну для розробки Android-додатків (доступно для завантаження за адресою:http://www.eclipse.org/downloads/).
3. Android SDK (Software Development Kit) – набір бібліотек та інструментів для розробки Android-додатків, включаючи емулятор мобільного пристрою (доступне для завантаження за адресою::http://developer.android.com/sdk/index.html). Android SDK включає всебе:
– API Android SDK – API-бібліотеки Android, що надаються для розробкидодатків;
– документація SDK;
– Development Tools – інструментальні засоби для розробки, що надають можливість компілювати та налагоджувати додатки, щостворюються;
– Sample Code – типові додатки, що демонструють деякі можливостіAndroid.
4. Android Development Tools (ADT) – плагін, що автоматизує процес побудови додатків для Android, інтегруючи інструменти розробки безпосередньо в середовище розробки Eclipse.
Плагін ADT додає в Eclipse наступні компоненти:
– майстер створення проекту – New Project Wizard, котрий спрощує створення Android-проектів та формує шаблон проекту;
– редактор Layout Editor – для розробки графічного інтерфейсудодатку;
– різні редактори ресурсів для створення, редагування та перевірки вірности XML-ресурсіврозробника.
Установка всього програмного забезпечення полягає у завантаженні, розпакуванні архіву та запуску виконавчого файлу з розширенням *. еxe. Після встановлення JDK, Eclipse IDE і Android SDK необхідно встановити плагін ADT. Для встановлення плагіну запускаємо Eclipse та обираємо пункт меню Help | Install NewSoftware.
У діалоговому вікні, що з’явиться, натиснути кнопку Add. У полі location ввести «https://dl-ssl.google.com/android/eclipse/». Після виконання всіх інструкцій з установки перезапустіть середу Eclipse.
Тепер потрібно зв'язати Eclipse з каталогом Android SDK. Виберіть у головному меню Eclipse пункт Window | Preferences, після пункт Android та в полі SDK location вказати каталог, в якому розташований Android SDK.
1.2 Інструменти для розробки на налагодження додатків
Окрім емулятору, SDK також включає безліч інших інструментальних засобів для налагодження та установки створюваних додатків:
– android – інструмент розробки, що запускається з командного рядка, що дозволяє створювати, видаляти і конфігурувати віртуальні пристрої, створювати і оновлювати AndroidSDKновимиплатформами, доповненнями і документацією;
– Dalvik Debug Monitor Service (DDMS) – інтегрований з Dalvik Virtual Machine, стандартної віртуальної машиною платформи Android, цей інструмент дозволяє керувати процесами на емуляторі або пристрої, а також допомагає у налагодженні додатків. За допомогою цього сервісу можна завершувати процеси, обирати певний процес для налагодження, генерувати трасовані дані, здійснити моніторинг використання пам'яті мобільного пристрою, переглядати інформацію про потоки, робити скріншоти емулятора або пристрої та багатоіншого;
– Hierarchy Viewer – візуальний інструмент, який налагоджувати і оптимізувати користувальницький інтерфейс додатку, що розробляється. Він показує візуальне дерево ієрархії класів View, аналізує швидкодію перемальовування графічних зображень на екрані і може виконувати ще багато інших функцій для аналізу графічного інтерфейсудодатків;
– Layoutopt – інструмент командного рядка, який допомагає оптимізувати схеми розмітки та ієрархії розміток в створюваному додатку. Необхідний для вирішення проблем при створенні складних графічних інтерфейсів, які можуть зачіпати продуктивністьпрограми;
– Draw 9- patch – графічний редактор, який дозволяє легко створювати NinePatch-графіку для графічного інтерфейсу розроблюванихдодатків;
– Sqlite3 – інструмент для доступу до файлів даних SQLite, створених і використовуванихAndroid-додатками;
– Traceview – цей інструмент видає графічний аналіз трасованих логів, які можна генерувати здодатків;
– Mksdcard – інструмент для створення образу диску, який можна використовувати в емуляторі для симуляції наявності зовнішньої карти пам'яті (наприклад, картиSD).
Для використання інструментів, що надаються Android SDK, необхідно налаштувати змінні оточення: додати в змінну оточення Path шляхи до підкаталогів Android SDK (наприклад, C:\eclipse\adt\sdk\platform-tools та C:\eclipse\adt\sdk\tools).
1.3 Android- емулятор мобільногопристрою
Android Virtual Device (віртуальний пристрій Android) – цеемулятор,щозапускаєтьсяназвичайномукомп'ютері.
Емулятор використовується для проектування, налагодження і тестування додатків в реальному середовищі виконання.
Перш ніж запустити Android-емулятор пристрою, необхідно створити екземпляр AVD. AVD визначає системне зображення та параметри пристрою, що використовуються емулятором.
Створити екземпляр AVD можна двома способами:
1. В командному рядку утилітою android.
2. За допомогою візуального інструменту Android SDK and AVD Manager. Його можна запустити з кореневого каталогу Android SDK або в середовищі Eclipse, обравши пункт меню Window | Android Virtual Device Manager. У вкладці Android VirtualDevices необхіднонатиснутикнопку New іувікні
«Create new Android Virtual Device» задайте конфігурацію для створюваного емулятору пристрою (рисунок 1.1):
– Name – ім’я створюваногопристрою;
– Device – тип пристрою;
– Target – версія Android SDK, що підтримується емуляторомAndroid-пристрою;
– Hardware keyboard present – якщо прапорець встановлено, то для набору тексту в емуляторі можливо буде використовувати не тільки віртуальну клавіатуру, але й клавіатурукомп'ютера;
– Display a skin with hardware controls – показує кнопки керування віртуальним пристроєм в вікні емулятору (home, menu, back і т.ін.). Рекомендовановідмітити.
– Memory Options – ємність оперативної пам’яті та пам’яті, що використовуєтьсядодатком;
– Internal Storage – вбудована пам'ять мобільного пристрою;
– SD Card – встановлює віртуальну карту пам'яті, для якої можна в текстовому полі Size задати необхіднуємність;
– Emulator Option – «Use Host GPU» (Graphics processing unit) для прискорення роботи емулятору, «Snapshot» – при встановленні прапорця, з'являється можливість зберігати стан системи в файл при закритті емулятора та відновлювати його при запуску, оминаючи тривалезавантаження.

Рисунок 1.1 – Створення нового AVD
Для зміни параметрів пристроїв у вікні Android Virtual Device Manager у вкладці Device Definitions необхідно натиснути кнопку NewDevice.
– Name – ім'япристрою;
– Screen Size і Resolution – відповідно розмір діагоналі (у дюймах) і дозвіл (в пікселях) екрана. На їх основі розраховується щільністьпікселів;
– Sensors – датчики пристрої: акселерометр (Accelerometer), гіроскоп (Gyroscope), GPS і датчик наближення (ProximitySensor);
– Cameras– камерипристрою: Front– передня, Rear–
задня;
– Input – пристрої введення: Keyboard – клавіатура, DPad
– джойстик, Trackball – трекбол;
– RAM – розмір оперативної пам'яті зазамовченням;
– Size – узагальнений розмір (клас). Розміри дисплеїв в Androidзалежновіддіагоналіподіляютьсяна4класи: small (<
3.55 in), normal (3.55 – 5 in), large (5 – 7.5in), xlarge (> 7.5 in);
– Screen Ratio – співвідношення сторін екрану: «long» для широкоформатних дисплеїв (наприклад, WQVGA, WVGA, FWVGA), «nolong» – для звичайних (наприклад, QVGA, HVGA, VGA);
– Density – клас щільності пікселів. На його основі розраховується величина dp. Вона використовується для однакового відображення графічних об'єктів на дисплеях з різною щільністю пікселів. Наприклад, картинка розміром 100×100px буде виглядати маленької на екрані з високою щільністю і великою на екрані з малою, а от 100×100dp виглядає приблизно однаковоскрізь.
Існує всього 7 класів щільності: nodpi – величина dp прирівнюється до 1px, графіка залежить від щільності, ldpi – низька щільність пікселів ~ 120dpi, mdpi – середня щільність пікселів ~ 160dpi, hdpi – висока щільність пікселів ~ 240dpi, xhdpi – дуже висока щільність ~ 320dpi, xxhdpi – надвисока щільність >400dpi, tvdpi – середнє між mdpi і hdpi (~213dpi);
– Buttons – визначає якими будуть кнопки управління (home, menu та ін): hardware – фізичні (відобразяться у вікні емулятора) або software – програмні (як впланшетах).
– Device State – орієнтація екрану (Portrait – портретна або Landscape – альбомна) і навігації по екрану (DPad і Trackball).
Програмний стек Android
Детальний опис програмного стеку Android SDK представлено на рисунку 1.2.
Центром платформи Android є ядро Linux, що відповідає за драйвера пристроїв, доступ до ресурсів, управління енергоспоживанням і вирішенням інших завданьОС.
![]() |
Рисунок 1.2 – Опис програмного стеку Android SDK
На наступному рівні, вище ядра, знаходиться ряд бібліотек С/С++, зокрема OpenGL, WebKit, FreeType, Secure Sockets Layer (SSL), бібліотека часу виконання С (libc), SQLite і Media. Системна бібліотека С, заснована на Berkeley Software Distribution (BSD), налаштована для роботи з вбудованими пристроями, що працюють під Linux. Медіабібліотеки працюють на основі PocketVideo OpenCORE. Ці бібліотеки відповідаютьзазапиставідтворенняаудіо-тавідеоформатів.
Бібліотека Surface Manager контролює доступ до системи відображення даних і підтримує 2D і 3D. Бібліотека WebKit відповідає за підтримку браузерів. Бібліотека FreeType підтримує шрифти. SQLite – це реляційна база даних, яка знаходитися на самому пристрої. Крім того, SQLite – це незалежна розробка з відкритим кодом, яка не пов'язана безпосередньо з Android. Можна використовувати інструменти, призначені для SQLite, і при роботі з базами данихAndroid.
Більша частина додатків з цього набору звертається до зазначених кореневих бібліотек через Dalvik Virtual Machine (Dalvik VM), що виконує на платформі Android роль шлюзу. Dalvik оптимізована для одночасного використання декількох екземплярів VM. Коли додатки Java звертаються до цих кореневих бібліотек, кожний додаток працює з власним примірником віртуальної машини.
В основних бібліотеках прикладного інтерфейсу програмування на Java містяться функції для телефонії, роботи з ресурсами, місцезнаходженням, користувальницькими інтерфейсами, постачальниками вмісту (даними), а також диспетчери пакетів (що відповідають за встановлення, безпеку і т.д.). Розробка додатків ведеться на підставі прикладного інтерфейсу програмування Java. В Android підтримується бібліотека Google Skia, що призначена для роботи з 2D – графікою, що написана на С/С++ і бібліотека роботи з 3D – графікою на основі скороченої версії OpenGL ES, оптимізованої для роботи з вбудованими системами. Для роботи з медіа, на платформі Android підтримується більшість поширених форматів аудіо, відео та зображень. В області бездротового зв'язку Android має в своєму розпорядженні спеціальні API для підтримки Bluetooth, EDGE, 3G, Wi-Fi і глобальної системи мобільного зв'язку (GSM), залежними відобладнання.
Пакети Java для Android
Пакети, що входять до складу Android SDK: android.app (модель додатків), android.bluethooth, android.content (постачальник вмісту для узагальнення обміну та зберігання даних), android.database (реферативна база даних), android.gesture (для роботи з жестами користувача), android.graphics, android.hardware (робота з камерою),
android.net (мережевіAPIна рівні сокетів), android.location (інформація про місцезнаходження об'єкта), android.media, android.opengl, android.os (служби операційної системи: обмін інформацією між процесами, облік змін в файлах, використання потоку повідомлень тощо), android.preference (можливість користувача керувати налаштуваннями свого додатку), android.provider (набір постачальників вмісту, що відносяться до інтерфейсу android.content), android.sax (набір API для XML), android.speech (робота з розпізнаванням мови), android.telephony (інформація про телефонний виклик), android.text (введення, обробка, оформлення тексту), android.units, android.view, android.webkit (класи, що відносяться до веб – браузеру), android.widget (класи елементів управління користувальницького інтерфейсу), com.google.android.maps (класу для роботи з картами Google). Опис даних пакетів детально описаний в документації SDK та розглянуто в рекомендованому переліку літератури по виконанню лабораторнихробіт.
СтруктураAndroid-проекту
СтворенняAndroid-проекту
Запускаємо Eclipse та обираємо File|New|Project..., в списку обираємо Android|Android Application Project і натискаємо кнопку Next. У відкритому діалоговому вікні майстра New Android Project заповніть наступні поля:
– Application name (ім'я додатку, котре буде відображатися в його заголовку) – SimpleProject;
– Project name (ім'я проекту і ім'я каталогу, що буде містити проектні файли) – SimpleProject;
– Package name (ім'я пакету) – com.example.simpleproject;
– Minimum Required SDK обирається мінімальна підтримувана платформа, мінімальний рівеньAPI;
– Target SDK – вказівка компілятору зібрати додаток для обраного рівня API (виставляється автоматично залежно від обраної версіїSDK);
– Compile With – тут за замовчуванням ставиться сама остання версіяAndroid;
– Theme – темадодатку.
Заповнившиусіполя, натискаємо на кнопку Next
для переходу в наступне вікно.
– залишаємо прапорець у полі Create custom launcher icon, щоб мати можливість встановити власний значок для програми;
– залишаємо прапорець у полі Createactivity;
– не ставимо прапорець у полі Mark this project as library, вона призначена для створеннябібліотек;
– залишаємо прапорець у полі Create Project in Workspace – всі ваші проекти будуть зберігатися в спеціальній папці. Або ви можете задати свій шлях для проекту.
У наступному вікні майстра можна вибрати і налаштувати свій значок для програми. Після цього натискаємо двічі Next та Finish.
Щоб побачити додаток в дії, виконуємо команду Run (рисунок 1.3). При цьому середовище розробки автоматично інсталює його на Android-емулятор.
![]() |
Рисунок 1.3 – Вікно програми SimpleProject
1.6.2 Зміст Android-проекту
ADT – плагін при створенні Android-проекту організує структуру у вигляді дерева каталогів, як і будь-який інший Java- проект (рисунок 1.4):
– scr –каталог, що містить вихідний код програми;
– assets – довільний збір каталогів іфайлів;
– res – каталог, що містить ресурсидодатку;
– drawable – каталог, який містить зображення або файли дескрипторівзображень;
– anim – каталог, що містить XML – дескриптори, в який описується анімація, що використовуєтьсяпрограмою;
– layout – каталог, в якому містяться види даної програми (вони створюються за допомогою XML – дескрипторів, а не шляхом написаннякоду);
– menu – каталог, що містить файли XML – дескрипторів, в який описується меню, що використовується впрограмі;
– values – каталог, що містить інші ресурси, використовувані програмою (рядки, стилі, кольори), що визначається XML –дескрипторами;
– xml – каталог, що містить додаткові XML – файли, використовуванідодатком;
– raw – каталог, що містить додаткові дані, які використовуютьсядодатком;
– AndroidManifest.xml – файл опису програми Android. У цьому файлі визначені явища, постачальники вмісту, служби та приймачі намірів (intent receiver) даного додатку. Цей файл також можна використовувати для декларативного пояснення прав доступу, необхідних для роботи з додатком, і для надання специфічних прав доступу іншими додатками, які користуватимуться службами даного. Крім того, у файлі можуть міститися інформація про інструментування (instrumentation detail), яка може використовуватися при тестуванні даного чи іншогододатка.
Розглянемо файл MainActivity.java. package com.example.simpleproject; importandroid.os.Bundle;
import android.app.Activity; importandroid.view.Menu;
public class MainActivity extends Activity {

Рисунок 1.4 – Структура програми SimpleProject
protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
}
public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true;
}
}
У першому рядку йде назва пакету (з Package Name). Далі
– рядки імпорту необхідних класів для проекту. Потім йде оголошення самого класу, який успадковується (extends) від абстрактного класу Activity. У самому класі єметод onCreate()
– він викликається, коли додаток створює і відображає розмітку активності.
– Рядок super.onCreate (savedInstanceState) – це конструктор батьківського класу, що виконує операції для роботиактивності.
Другтй рядок setContentView (R.layout.activity_main) – підключає вміст з файлу розмітки. Як аргумент ми вказуємо ім'я файлу без розширення з папки res/layout/ (за замовченням activity_main.xml).
Ви можете перейменувати файл або створити свій файл з ім'ям lab.xml, тоді код буде виглядати так: setContentView (R.layout.lab);
Якщо ваш додаток буде складатися з безлічі екранів, то ви будете створювати для кожного екрана свою розмітку і підключати її описаним вище чином.
Перегляд і редагування властивостей видів додатку можливо з файлу activity_main.xml: оберіть потрібний об'єкт в графічній версії файлу і переглядайте властивості даного об'єкта (праворуч).
Додавання (зміна) рядків, зображень та інших ресурсів можливо з /res/values: для цього наприклад оберіть файл strings.xml і натисніть на кнопку Add. Майстер створення запропонує обрати тип елементу, а після його ім'я і значення.
Структура файлуAndroidManifest.xml
Файл маніфесту інкапсулює всю архітектуру Android- додатку, його функціональні можливості і конфігурацію. Розглянемо призначення кожного з них.
– <manifest> – це кореневий елемент файлу, що містить наступні атрибути: xmlns:android (простір імен Android) з постійним значенням «http://schemas.android.com/apk/res/android», package (ім’я пакету додатку), android:versionCode (внутрішній номер версії) і android:versionName (номер користувальницькоїверсії);
– <uses-permission> – описує дозволи безпеки, які потрібно надати вашому пакету. Кількість не обмежена. Наприклад, <uses-permission android:name = "android.permission. RECEIVE_SMS"/>;
– <permission> – оголошує дозвіл безпеки, що може використовуватися до певних компонентів або функціональності даного додатка, а також права доступу інших додатків до додатку, що розробляється,використовуючиатрибути: android:name (елемент дозволу), android:label (ім'я дозволу, що відображається користувачеві), android:description (опис), android:icon (іконка розширення), android:permissionGroup (визначає приналежність до групи дозволів) і android:protectionLevel (рівеньзахисту);
– <permission-tree> – оголошує базове ім'я для дерева дозволів (простірімен);
– <permission> – визначає ім’я для набору логічно зв’язаних рішень (категоріядозволів);
– <instrumentation> – визначає можливість контролювати взаємодію додатку зсистемою;
– <uses-sdk> – визначає сумісність програми з зазначеної версією платформи Android (атрибут minSdkVersion);
– <uses-configuration> – вказує необхідну для додатку апаратну і програмну конфігурацію мобільногопристрою;
– <uses-feature> – визначає функціональність, яка потрібна для роботидодатку;
– <supports-screens> – визначає здатність екрану, необхідну для функціонуванняпристрою;
– <application> – кореневий елемент, що містить оголошення компонентів додатку, доступних в пакеті. Цей елемент може також включати глобальні та/або задані за замовчуванням атрибути для програми, такі як мітки, значок, тема, вимоги дозволу, і т.ін. Елемент містить наступні дочірні елементи: <activity> з атрибутами android:name, android:label та інші (кожен <activity> може містити елемент <Intent-filter>, що надає для компонентів-клієнтів можливість отримання Intent оголошеного типу, відфільтровуючі ті, що не значимі для компоненту,іміститьвпершучергудочірніелементи<action>,
<category>, <data>), <activity-alias> – псевдонім Activity,
<receiver> з внутрішнім елементом intent – filter (дозволяє додатку повідомляти про заміну даних або про діях, які відбуваються, навіть якщо програма не виконується в даний час), <service> з внутрішнім елементом intent - filter (працює у фоновому режимі), <provider>- компонент, який управляє постійними даними і відкриває до них доступ іншимдодаткам,
<uses-library> – визначає загальнодоступну бібліотеку для компіляції додатку.
Завдання на роботу
Створити Android-проект за допомоги конструкторів та мастерів, змінивши властивості виду: встановити фон додатку на обраний, змінити надпис, додати зображення. Приклад наведено на рисунку1.5.
![]() |
Рисунок 1.5 – Вікно програми після зміни її властивостей
Зміст звіту
– титульний лист, тема та метароботи;
– текст розробленої програми;
– результати розробленоїпрограми;
– висновки;
– відповіді на контрольнізапитання.
Контрольні питання
1. Програмний стекAndroid.
2. Dalvik VirtualMachine.
3. Відповідність версії платформи та рівеньAPI.
4. Пакети Java дляAndroid.
5. Створення AVD екземпляру(емулятору).
6. Каталоги ресурсівпроекту.
7. Каталог констант додатку/res/values/.
8. ФайлAndroidManifest.xml.
ЛАБОРАТОРНА РОБОТА №2
ГРАФІЧНИЙ ІНТЕРФЕЙС КОРИСТУВАЧА. ОСНОВНІ ВІДЖЕТИ ТА ОБРОБКА ПОДІЙ
Мета роботи: ознайомитися з основними віджетами, їх компоновкою та обробкою подій, викликаних користувачем.
Короткі теоретичні відомості
2.1 Компоновка елементівуправління
Компоновка – це архітектура розташування елементів інтерфейсу користувача для окремого вікна (Activity). Компоновка визначає структуру розташування елементів (тобто віджетів, View) у вікні та містить всі елементи, які надаються користувачу програми. При створенні компоновки треба враховувати те, що екрани мобільних пристроїв мають меншу роздільну здатність, наприклад, ніж монітори, різноманітність мобільних пристроїв з різними розмірами та щільністю пікселів, різні типи сенсорних екранів.
В android-додатку графічний інтерфейс користувача формується за допомогою об’єктів View та ViewGroup. Клас View є базовим класом для ViewGroup та складається з набору об’єктів View. Об’єкти View – це основні модулі для створення графічного інтерфейсу користувача. Клас View є базовим для елементів управління (віджетів) – текстових полів, кнопок та ін. Клас ViewGroup представляє контейнер, який служить ядром для підкласів, що називаються компоновки (layouts). Ці класи формують розташування віджетів на формі та містять дочірні елементи View та ViewGroup (рисунок 2.1). Таким чином для кожного Activity формується дерево ієрархії вузлів View та ViewGroup.
При запуску програми система отримає посилання на кореневий вузол дерева та використовує її для відображення графічного інтерфейсу користувача на мобільному пристрої. Система також аналізує елементи дерева ієрархії, додаючи їх до елементів-батьків. Для цього в методі onCreate() треба викликати метод setContentView() передаючи в якості
параметру посилання на ресурс компоновки. Наприклад, якщо компоновка знаходиться в файліmail.xml:
| ViewGroup |
| |||||
|
|
| ViewGroup |
| |||
|
| ||||||
|
|
| View | ||||
|
| ||||||
|
| ||||||
|
| View | |||||
|
| ||||||
|
| ViewGroup |
| ||||
|
| ||||||
|
|
| View | ||||
|
| ||||||
|
| ||||||
|
| View | |||||
|
| ||||||
|
| ||||||
|
| View | |||||
|
| ||||||
|
| View |
| ||||
|
| ||||||
|
| ||||||
|
| View |
| ||||
|
| ||||||
Рисунок 2.1 – Приклад дерева вузлів View та ViewGroup для Activity
// ініціалізація компоновки
public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main);
}
Типикомпоновок
Для створення вікон існує декілька стандартних типів
компоновки, які є підкласами ViewGroup:
– FrameLayout;
– LinearLayout;
– TableLayout;
– RelativeLayout.
Розглянемо їх використання детальніше.
Компоновка FrameLayout
FrameLayout є найпростішим типом компоновки. В основному це пустий простір на екрані, яке можна заповнити тільки єдиним дочірнім елементом View чи ViewGroup. Всі дочірні елементи додаються до верхнього лівого кута екрану (рисунок2.2).
![]() |
Рисунок 2.2 – Компоновка FrameLayout
В цій компоновці неможна визначити різноманітне місцезнаходження для дочірнього елементу. Всі дочірні елементи додаються поверх попередніх, частково чи повністю затіняючи їх. Виходячи з цього, батьківський елемент займає весь простір екрану та має наступні атрибути: layout_width= ”match_parent” та layout_height=”match_parent”. Дочірній елемент має дані атрибути з будь-яким параметром: “match_parent” ( відповідає батьку та приймає значення відповідного параметра як у батька) чи “wrap_content” (стандартний розмір елемента). Елементи інтерфейсу будуть розглянуті далі, проте основними атрибутами для кожного виду є наступні: android:id, android:layout_width, android:layout_height, android:text.
Компоновка FrameLayout використовується рідко, оскільки не дозволяє створити складні вікна з множиною елементів. Вона найчастіше використовується для оверлеев. Наприклад, якщо у вікні є зображення, що займає весь екран (чи карта, кадр з відеокамери та ін.), а на ньомує елементи
керування (наприклад, елемент масштабування, елемент пошуку, індикатор часу чи стану таін.).
Наприклад, створимо компоновку FrameLayout, розмістивши на неї дві кнопки як на рисунку2.2.
<FrameLayout xmlns:android=http://schemas.android.com/ apk/res/android”
android:layout_android:layout_height=“match_parent”>
<Button
android:id=“@+id/b1” android:layout_heigth=“match_parent” android:layout_android:text=“Button1”
/>
<Button
android:id=“@+id/b2” android:layout_heigth=“wrap_content” android:layout_android:text=“Button2”
/>
</FrameLayout>
Компоновка LinearLayout
Компоновка LinearLayout вирівнює всі дочірні елементи в одному з напрямів – вертикально чи горизонтально, в залежності від значення атрибуту android:orientation: “horizontal”, “vertical”.
Наприклад, створимо компоновку LinearLayout, розмістивши на неї кнопки вертикально як на рисунку2.3.

Рисунок 2.3 – Компоновка LinearLayout
<LinearLayout xmlns:android=http://schemas.android.com/ apk/res/android”
android:layout_android:layout_height=“match_parent” android:orientation=“vertical”>
<Button
android:id=“@+id/b1” android:layout_heigth=“wrap_content” android:layout_android:text=“Button1”
/>
<Button
android:id=“@+id/b2” android:layout_heigth=“wrap_content” android:layout_android:text=“Button2”
/>
</LinearLayout>
Компоновка LinearLayout має атрибут android: layout_weight, який визначає вагу дочірнього елементу, тобто надає можливість розширюватися (за замовченням, вага має нульове значення).
Оскільки компоновки можуть бути вкладеними, то у вікні можна розташувати наприклад декілька лінійних компоновок з будь-якою орієнтацією їх елементів. Таке застосування є найбільш розповсюдженим засобом при створенні інтерфейсу користувача для Android-додатків.
КомпоновкаTableLayout
Компоновка TableLayout позиціонує всі дочірні елементи у строки та стовбці. TableLayout не відображує лінії розділу чарунок. TableLayout може мати строки з різним числом чарунок. При формуванні компоновки деякі чарунки можна залишати порожніми. При створенні компоновки для строк використовуються об’єкти TableRow. Чарунка може бути об’єктом View чиViewGroup.
Компоновка TableLayout на практиці застосовується рідко, зазвичай замість неї використовують декілька компоновок LinearLayout. TableLayout зручно використати, якщо розміщення елементів представлено у вигляді таблиці (рисунок 2.4).
Наприклад, створимо компоновку TableLayout, розмістивши на неї кнопки як на рисунку 2.4.

Рисунок 2.4 – Компоновка TableLayout
<TableLayout xmlns:android=http://schemas.andro id.com/apk/res/android”
android:layout_android:layout_height=“match_parent”>
<TableRow androd:id=”@+id/TR1”
android:layout_heigth=“wrap_content” android:layout_width=“match_parent”>
<Button
android:id=“@+id/b1” android:layout_heigth=“wrap_content” android:layout_android:text=“1”
/>
…
</TableRow>
<TableRow androd:id=”@+id/TR2”
android:layout_heigth=“wrap_content” android:layout_width=“match_parent”>
<Button
android:id=“@+id/b4” android:layout_heigth=“wrap_content” android:layout_android:text=“4”
/>
…
</TableRow>
…
</TableLayout>
Компоновка RelativeLayout
Компоновка RelativeLayout дозволяє дочірнім об’єктам визначати свою позицію відносно вказаного за ідентифікатором елемента. В RelativeLayout дочірні елементи розташовані так, що якщо перший елемент розташовано у центрі екрану, тоді інші елементи будуть вирівняні відносно центру екрану. При об’яві компоновки в XML-файлі, елемент, на який будуть посилатися інші об’єкти для позиціонування, треба об’явити раніш ніж елементи, які звертаються до нього за його ідентифікатором. В компоновці RelativeLayout розташування елемента можна визначати відносно іншого елемента, на який посилаються через його ідентифікатор. Наприклад, якщо хочемо отримати ліворуч розташований елемент TextView від елемента button2, то: android:layout_toLeftOf=”@id/Button2”. Розташування відносно вказаного: android:layout_above, android:layout_below, android:layout_toLeftOf, andr oid:layout_toRightOf. Вирівнювання: android:layout_ alignBaseline, android:layout_alignBottom, android: layout_alignLeft, android:layout_alignRight, andro id:layout_alignTop. Позиціонування відносно контейнеру: android:layout_alignParentBottom, android:layout_ alignParentLeft, android:layout_alignParentRight, android:layout_alignParentTop, android:layout_ centerHorizontal, android:layout_centerInParent, android:layout_centerVertical.
![]() |
Рисунок 2.4–КомпоновкаRelativeLayout
2.3 Базові віджети
Виджет – це об’єкт View, який служить інтерфейсом для взаємодії з користувачем. Тобто відмет – це елемент керування. Android забезпечує набор готових віджетів, таких як кнопки, текстові поля, перемикачі, полоси прокрутки, індикатори, слайдери, адаптери даних та ін.
Для кожного віджета потрібно визначити його атрибути. Основними атрибутами є наступні: id, layout_width, layout_height, text, gravity.
Ідентифікатор елемента є унікальним та задається у вигляді android:id=”@+id/view1”, де view1 – унікальний id елемента; символ “@” означає, що синтаксичний аналізатор XML повинен розгорнути дану строку і визначити цей вираз як ресурс ідентифікатора; символ “+” означає, що це нове ім’я ресурсу, яке потрібно бути створено і додано у ресурси в файл R.java, який середовище Android автоматично генерує.
Ширина елемента задається у вигляді android:(стандартний розмір) чи android:(розмір відповідає батьківському елементу, тобто якщо елемент-батько займає весь простір екрану за шириною, то і у дочірнього елемента ширина буде займати ширину екрана).
Висота елемента android:width також може приймати значення ”wrap_content” чи ”match_parent” в залежності від потрібного застосування.
Текст елемента задається у вигляді android:text=”something” чи android:text= ”@string/res_str”, де res_str – ім’я ресурсу (ресурс можна задати в каталогу/res/values).
Розташування елементу задається за допомогою
android:gravity(“left”, “right”, “center” та ін.).
2.3.1 Віджет TextView
TextView застосовується для відображення тексту без можливості його редагувати користувачем, крім того він служить для відображення текстових даних в контейнерних відметах для відображення списків (рисунок 2.5). Від TextView успадковуються інші елементи управління, на якихповиненбути відображений текст (кнопки, прапорці, перемикачі). У елемента є багато атрибутів для роботи з текстом,наприклад:
– android:textSize(розмір в px, dp, sp, in, pt, mm);
– android:textStyle(“normal”, “bold”, “italic”);
– android:textColor (колір тексту в форматі #RRGGBB чи#AARRGGBB);
– android:autoLink (створення посилання зі значеннями “web”, “phone”, “email”, “map”, “all”,“none”).
![]() |
Рисунок 2.5 – Використання віджету TextView
Атрибути тексту можна задати програмно (в файлі *.java):
// id елемента Т1
TextView T1=(TextView) findViewById(R.id.T1);
// встановлення тексту T1.setText(“something…”);
2.3.1 ВіджетEditText
EditText застосовується для відображення тексту з можливістю його редагування (рисунок 2.6). Основний метод класу – getText() з поверненим значенням EditText. За допомогою атрибуту android:hint=“Enter text…” встановлюється підказка для введення тексту. В класі визначено метод для виділення тесту з певних позицій – setSelection(). Більшість методів роботи з текстом та його форматування успадковані від базового класу TextView.
![]() |
Рисунок 2.6 – Віджет EditText
Полосипрокрутки
Полоси прокрутки в Android представлені віджетами ScrollView та HorizontalScrollView, які є контейнерними елементами і успадковуються від ViewGroup. Ці елементи – контейнери типу FrameLayout, це означає, що в них можна розмістити тільки одне дочірнє представлення. Цей дочірній елемент, в свою чергу, може бути контейнером зі складною ієрархією об’єктів. В якості дочірнього елементу для полос прокрутки зазвичай використовують LinearLayout з вертикальною чи горизонтальною орієнтацієюелементів.
Віджет ScrollView підтримує тільки вертикальну прокрутку, тому для створення вертикальної та горизонтальної прокруток використовують обидва віджета. Звичайно ScrollView використовують в якості кореневого елементу, а HorizontalScrollView – дочірнього.
// файл компоновки main.xml
<ScrollView
android:id=”@+id/s_ver” android:layout_android:layout_height=”wrap_content” >
<HorizontalScrollView android:id=”@+id/s_hor” android:layout_android:layout_height=”match_parent” >
// елемент (наприклад, TextView)
<TextView
android:id=”@+id/t” android:layout_android:layout_height=”wrap_content” android:isScrollContainer=”true” />
</HorizontalScrollView>
</ScrollView>
// файл project.java
import android.app.Activity; import android.os.Bundle; importandroid.widget.TextView;
public class Project extends Activity{
public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main);
TextView t=(TextView)findViewById(R.id.t); t.setText(“…”); //ввести чи завантажити
} }
2.3.3 Відображенняграфіки
2.3.4 Відображення графіки виконується за допомогою віджету ImageView. Класс ImageView має змогу завантажувати зображення з різних джерел, таких як ресурси програмного додатку або зовнішні файли. В цьому класі існує декілька методів завантаження зображення (в файліпроекту
*.java):
– setImageResource(int resId) – завантажує зображення за його ідентифікаторомресурсу;
– setImageURI(Uri im_uri) – завантажує зображення за йогоURI;
– seyImageBitmap(Bitmap bitmap) – завантажує растровезображення.
Крім того ImageView визначені методи для установки розміру зображення – setMaxHeight(), setMaxWidth(), getMinimumHeight(), getMinimumWidth(), а також його масштабування – getScaleType(), setScaleType().
Для завантаження зображення в XML-файлі компоновки використовується атрибут android:scr. Ресурси зображення частіше за все поміщають в /res/drawable/проекту.
// 1 вар. (завантаження pic1 в *.xml)
<ImageView
android:id=”@+id=image1” android:layout_android:layout_height=”wrap_content” android:scr=”@drawable/pic1”>
// 2 вар. (об’ява в *.xml,завантаження pic2 в *.java)
//файл *.xml
<ImageView
android:id=”@+id=image2” android:layout_android:layout_height=”wrap_content”>
//файл *.java
import android.widget.ImageView;
…
public class Progect extends Activity{
…
final ImageView image2 =(ImageView) findViewById (R.id.image2);
image2.setImageResource(R.drawable.pic2);
…
}
2.4 Обробка подій. Кнопки тапрапорці
Після додавання віджетів в інтерфейс користувача, потрібно організувати взаємодію віджетів з користувачем. Для цього необхідно визначити обробник подій та зареєструвати його для даногоелементу.
Клас View містить в собі колекцію вкладених інтерфейсів, які мають назву On…Listener(), в кожному з яких об’явлено єдиний абстрактний метод. Цей метод необхідно перевизначити в вашому класі. Його буде визивати система Android, коли з екземпляром View, до якого було підключено слухача подій, стане взаємодіяти з користувачем.
Клас View містить наступні інтерфейси:
– OnClickListener;
– OnLongListener;
– OnFocusChangeListener;
– OnKeyListener;
– OnTouchListener;
– OnCreateContextMenuListener.
Якщо потрібно, щоб віджет отримав повідомлення про виконану дію користувачем, потрібно в класі вікна (Activity) реалізувати інтерфейс обробника подій (наприклад, OnClickListener) та визначити метод його зворотного виклику (наприклад, onClick()), де буде міститися код обробки події, та зареєструвати слухач події за допомогою, наприклад, setOnClickListener.
КласButton
Клас Button (кнопка) – найчастіше використовуваний елемент керування (рисунок 2.7). Зазвичай кнопка потребує написання коду обробки події натиснення onClick.
![]() |
Рисунок 2.7 – Віджет Button
// файл *.xml
…
<Button
android:id=”@+id/b1” android:height=”wrap_content” android:width=”match_parent”
android:text=”Button 1”>
// 1 вар. обробки натиснення кнопки (файл *.java)
…
import android.widget.*; import android.view.View;
public class Project extends Activity{ public void onCreate(Bundle state){
super.onCreate(state); setContentView(R.layout.main);
final Button b1 = (Button) findViewById(R.id.b1); final Button b2 = (Button) findViewById(R.id.b2); b1.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
// дії після натиснення кнопки 1
}
});
b2.setOnClickListener(new View.OnClickListener(){ public void onClick(View v){
// дії після натиснення кнопки 2
}
});
}
}
АБО
// 2 вар. обробки натиснення кнопки (файл *.java)
…
import android.widget.*; import android.view.View;
public class Project extends Activity{ public void onCreate(Bundle state){
super.onCreate(state); setContentView(R.layout.main);
final Button b1 = (Button) findViewById(R.id.b1); final Button b2 = (Button) findViewById(R.id.b2); b1.setOnClickListener(b1_click); b2.setOnClickListener(b2_click);
}
public OnClickListener b1_click=new OnClickListener(){ public void onClick(View v){
// дії після натиснення кнопки 1
}
};
public OnClickListener b2_click=new OnClickListener(){ public void onClick(View v){
// дії після натиснення кнопки 2
}
};
}
АБО
// 3 вар. обробки натиснення кнопки (файл *.java)
// найліпший в перелічених варіантів
…
import android.widget.*; import android.view.View;
import android.view.View.OnClickListener;
public class Project extends Activity implements OnClickListeber{
public void onCreate(Bundle state){ super.onCreate(state); setContentView(R.layout.main);
final Button b1 = (Button) findViewById(R.id.b1); final Button b2 = (Button) findViewById(R.id.b2); b1.setOnClickListener(this); b2.setOnClickListener(this);
}
public void OnClick (View v){ swith(v.getId()){
case R.id.b1:
// дії після натиснення кнопки 1 break;
case R.id.b2:
// дії після натиснення кнопки 2 break;
}
}
}
КласCheckBox
Елемент CheckBox (прапорець) – це перемикач з двома
станами (рисунок 2.8). Для програмного відстеження зміни стану елемента необхідно реалізувати інтерфейс CompoundButton.OnCheckedChangeListener.
![]() |
Рисунок 2.8 – Віджет CheckBox
// файл *.xml
…
<CheckBox
android:id=”@+id/cb1” android:height=”wrap_content”
android:android:text=”CheckBox 1”>
// файл *.java
…
import android.widget.CheckBox; importandroid.widget.CompoundButton;
public class Project extends Activity implements CompoundButton.OnCheckedChangeListener{
public void onCreate(Bundle state){ super.onCreate(state); setContentView(R.layout.main);
final CheckBox cb1 = (CheckBox) findViewById (R.id.cb1);
final CheckBox cb2 = (CheckBox) findViewById (R.id.cb2);
cb1.setOnCheckedChangeListener(this); cb2.setOnCheckedChangeListener(this);
}
public void OnCheckedChange (CompoundButton v, Boolean isChecked){
swith(v.getId()){ case R.id.cb1:
if(isChecked){ // дії вибору CheckBox 1} break;
case R.id.cb2:
if(isChecked){ // дії вибору CheckBox 2} break;
…
} }}
КласRadioButton
Віджети RadioButton (перемикачі) зазвичай використовують в складі групи контейнеру RadioGroup. Контейнер RadioGroup успадковується від ViewGroup і може бути використаний в якості кореневого елементу компоновки вікна, якщо на екрані є тільки група перемикачів, або в якості вкладеного в інший контейнер, наприклад в LinearLayout. Перемикачі дають змогу користувачу обрати тільки один із запропонованих варіантів. Основний метод зміни стану – toggle(), який інвертує стан перемикача. Крім того, від базового класу успадковуються інші методи, наприклад, isChecked() та setChecked().
//файл *.xml
<RadioGroup Android:orientation=”vertical”
Android:layout_Android:layout_height=”match_parent”>
<RadionButton Android:id=”@+id/r1”
Android:layout_Android:layout_height=”wrap_content” Android:text=”Mode 1”>
…
</RadioGroup>
//файл*.java
…
import android.widget.*; import android.view.View;
import android.view.View.OnClickListener;
public class Project extends Activity implements OnClickListeber{
public void onCreate(Bundle state){ super.onCreate(state); setContentView(R.layout.main);
final RadioButton r1 = (RadioButton) findViewById(R.id.r1);
final RadioButton r2 = (RadioButton) findViewById(R.id.r2);
final RadioButton r3 = (RadioButton) findViewById(R.id.r3);
r1.setOnClickListener(this); r2.setOnClickListener(this); r3.setOnClickListener(this);
}
public void OnClick (View v){ swith(v.getId()){
case R.id.r1:
// дії після натиснення кнопки 1 break;
…
} }}
Завдання на роботу
Створіть Android-проект простого текстового редактору з кнопками зміни розміру шрифту, вибору одного з типів шрифту (за допомогою RadioGroup) та вертикальної полоси прокрутки. В якості поля введення тексту використати EditText. В якості компоновки рекомендовано використати вкладені LinearLayout. Зразок текстового редактору показано на рисунку2.9.

Рисунок 2.9 – Простий текстовий редактор
Зміст звіту
– титульний лист, тема та метароботи;
– текст розробленої програми;
– результати розробленоїпрограми;
– висновки;
– відповіді на контрольніпитання.
Контрольні питання
1. Компоновка елементів управління наAndroid.
2. Типи компоновок. Їх переваги танедоліки.
3. Поняття Activity таView.
4. Перелік основних атрибутів длявіджетів.
5. Як створити новий ідентифікаторелементу?
6. Способи встановлення тексту віджетуTextView.
7. Встановлення полоспрокрутки.
8. Методи завантаження зображення зImageViw.
9. Механізм обробки подійAndroid-додатка.
10. Застосування віджетуButton.
11. Застосування віджетуCheckBox.
12. Застосування віджетуRadioButton.
ЛАБОРАТОРНА РОБОТА №3 ГРАФІЧНИЙ ІНТЕРФЕЙС КОРИСТУВАЧА. СПИСКИ
Мета роботи: ознайомитися із віджетами-списками та адаптерами даних.
Короткі теоретичні відомості
3.1 Віджети-списки та прив’язкаданих
Для відображення даних у віджетах застосовуються адаптери, які призначені для з’єднання списку даних і відображає ці дані віджета. Самим простим адаптером для використання при з’єднанні даних є шаблонний клас ArrayAdapter<T>, наприклад:
String[] db = {“s1”, “s2”, “s3”}; ArrayAdapter<String> adapter = new ArrayAdapter
<String>(this, android.R.layout.simple_list_item_1, db);
Конструктор класу ArrayAdapter приймає наступні параметри:
– об’єкт Context – екземпляр класу, який реалізує Activity;
– ідентифікатор ресурсу додатку, вбудовані системні ідентифікатори ресурсу – константи, які визначені в класі android.R.layout (simple_list_item, simple_spinner_ dropdown_item, simple_gallery_item, simple_list_item_ checked…);
– масив чи список типу List<T>об’єктів для відображення увіджеті.
3.1.1 ВіджетAutoCompleteTextView
Віджет AutoCompleteTextView – це текстове поле завто заповненням і можливістю редагуванням введеного тексту. Віджет є підкласом EditText, він дозволяє використовувати всі можливості редагування тексту. Віджет має властивість вказання мінімального числа символів, які повинен ввести користувач, для роботи функції автозаповнення списку – android:completionThreshold.
Дляв’язаннявіджету з даним необхідно встановити адаптер черезsetAdapter().
// файл *.xml
<LinearLayout xmlns:android = "http://schemas.android. com/apk/res/android"
android:layout_android:layout_height="wrap_content" android:orientation="vertical" >
<TextView
android:id="@+id/t1" android:layout_android:layout_height="wrap_content" android:text="Choice:" />
<Button
android:id="@+id/b1" android:layout_android:layout_height="wrap_content" android:text="OK" />
<AutoCompleteTextView android:id="@+id/mylist" android:layout_android:layout_height="wrap_content" android:completionThreshold="3" />
</LinearLayout>
// файл *.java
import android.os.Bundle; import android.app.Activity; import android.view.View;
import android.view.View.OnClickListener; import android.widget.*;
import android.text.*;
public class MainActivity extends Activity implements TextWatcher, OnClickListener{
private TextView t1;
private AutoCompleteTextView mylist;
private String[] db = {"Jacob Anderson", "Joseph Godwin", "Joshua Harrison", "Emma Lawson"};
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
t1=(TextView)findViewById(R.id.t1);
mylist = (AutoCompleteTextView) findViewById(R.id.mylist);
mylist.addTextChangedListener(this); mylist.setAdapter(new ArrayAdapter<String>
(this, android.R.layout.simple_dropdown_item_1line, db));
Button b1 = (Button) findViewById(R.id.b1); b1.setOnClickListener(this);
}
public void afterTextChanged(Editable s){
// TODO Auto-generated methodstub
}
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// TODO Auto-generated method stub
}
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
}
public void onClick(View arg0) {
// TODO Auto-generated method stub
if (arg0.getId()==R.id.b1) t1.setText(mylist.getText());
}
}

Рисунок 3.1 – Застосування віджету AutoCompleteTextView
3.1.2 Віджет MultiAutoCompleteTextView
Віджет MultiAutoCompleteTextView – це текстовеполе з авто заповненням і можливістю редагуванням введеного тексту, який розширює функціональність
AutoCompleteTextView. Віджет показує авто заповнення для кожної підстроки тексту, яка розділена знаком пунктуації. Роздільник задається явно викликом метода setTokenizer():
MultiAutoCompleteTextView mylist = (MultiAutoCompleteTextView) findViewById(R.id.mylist); mylist.addTextChangedListener(this);
mylist.setAdapter(new ArrayAdapter<String> (this, android.R.layout.simple_dropdown_item_1line, db));
//встановлення роздільника
Mylist.setTokenizer(new MultiAutoCompleteTextView. CommaTokenizer());
3.1.3 ВіджетListView
Віджет має вигляд вертикального списку із прокруткою. Зв’язані зі списком дані ListView отримує від об’єкту ListAdapter. На відміну від AutoCompleteTextView в якості базового класу використовується ListActivity замість Activity. Для з’єднання об’єкта ListActivity із даними необхідно розробити клас, який реалізує інтерфейс ListAdapter. Android забезпечує два стандартних адаптера списку: SimpleAdapter (статичне з’єднання даних невеликого обсягу), SimpleCursorAdapter (великий масивданих).
// файл *.xml
<LinearLayout xmlns:android = "http://schemas.android. com/apk/res/android"
android:layout_width = "match_parent" android:layout_height="match_parent" android:orientation="vertical" >
<TextView
android:id="@+id/t1" android:layout_android:layout_height="wrap_content"/>
<ListView
android:id="@android:id/list" android:layout_android:layout_height="wrap_content" />
</LinearLayout>
// файл *.java
import android.os.Bundle; import android.app.Activity;
import android.view.Menu;
import android.app.ListActivity; import android.widget.*;
import android.view.View;
public class MainActivity extends ListActivity {
private String[] db = {"Jacob Anderson", "Joseph Godwin", "Joshua Harrison", "EmmaLawson"};
private TextView t1;
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); t1=(TextView)findViewById(R.id.t1);
setListAdapter(new ArrayAdapter<String> (this, android.R.layout.simple_list_item_1,db));
}
public void onListItemClick(ListView p, View v, int position, longid){
t1.setText(db[position]);
}
}
![]() |
Рисунок 3.2 – Застосування віджету ListView
3.1.4 Створення списку із заданоюкомпоновкою
Крім використання стандартних віджетів- списків можна створити список, визначив власну компоновку однієї строки цього списку. Такий підхід використовується для створення таблиць. Для з’єднання табличних даних використовуються класи SimpleAdapter та SimpleCursorAdapter. Конструктор SimpleAdapter маєвигляд:
SimpleAdapter(this, list, R.layout.main, new String[] {items.item1, items.item2, …}, newint[]
{R.id.item1, R.id.item2, …})
Приклад. Створимо список-довідник, в якому визначено ПІБ та номер телефону. В файлі main.xml опишемо два віджета TextView з іменами name та phone (компоновка горизонтальна). Для зберігання строки, яка представляє контакт, створимо окремий файл Items.java.
// Items.java
package com.samples.ui.lab; import java.util.HashMap;
public class Items extends HashMap<String, String>{ private static final long serialVersionUID=1L; public static final String NAME = “name”; public static final String PHONE = “phone”; public Items(String name, String ph
















