Початок роботи з Android
Для початку необхідно встановити засоби для розробки. До таких можна віднести:
- Java
- В першу чергу для створення додатків завантажимо і встановимо JDK 7. JDK 7 можна знайти на сайті компанії Oracle:
- http://www.oracle.com/technetwork/java/javase/downloads/index.html
- Android Studio
Встановити середовище розробки Android Studio рекомендується з офіційного ресурсу http://developer.android.com/sdk/index.html
Після встановлення середовища розробки, давайте його запустимо і створимо пустий проект.
У вікні Create New Project потрібно вказати:
- Application name
- Company Domain
- Project location
Далі вказати тип додатку для операційної системи Android і мінімальну версію ОС, яку повинні підтримувати мобільні пристрої.
Наступним етапом Вам буде запропоновано обрати шаблон проекту. На вибір пропонується декілька шаблонів, які стануть основою вашого додатку.
Далі потрібно вказати назви початкових файлів логіки Java, файлу графічної розмітки макету, титулу та меню.
Після завершення створення проекту можна побачити подібний інтерфейс, поділений на два робочі простори. Зліва - дерево проекту з файлами та
каталогами, справа - робоча область для кодування і створення розміток макетів.
Дерево проекту складається з набору каталогів, які зберігають файли Java, ресурси проекту, бібліотеки, конфігураційні файли та ін.
В робочій частині середовища Android Studio можна перемикатися між вкладками з відкритими файлами для редагування. На рисунку нижче відкритий
файл розмітки за замовчуванням, який був створений разом з проектом. Розмітку додатку можна створювати різними способами: використовуючи
редактор із палітрою компонентів та за допомогою коду на мові розмітки XML. Бачимо, щоб змінити інтерфейс створення макету додатку потрібно
перемикатися між вкладками Design і Text, відповідно.
На рисунку нижче можна побачити стандартну розмітку у вигляді XML.
Після створення пустого проекту його можна запустити. Це можна зробити на реальному пристрої, або використовуючи емулятор (стандартний Android Studio, або сторонній).
- Для запуску програми на реальному мобільному пристрої необхідно на цьому пристрої в налаштуваннях включити опцію USB debugging (Налагодження через USB).
- На пристроях під управлінням Android 4.0 і вище опція USB debugging (Налагодження USB) знаходиться в Settings> Developer options (Настройки> Для розробника).
- На пристроях з ОС Android 4.2 і вище Developer options (Для розробника) за замовчуванням приховані. Щоб зробити їх доступними, треба зайти в Settings> About phone (Установки> Про телефон) і сім разів натиснути Build Number (Номер збірки). Поверніться до попереднього меню або там ви побачите доступний пункт Developer options (Для розробника).
Після натискання на кнопку Run з'явиться вікно із списком для вибору пристрою, на якому потрібно запустити додаток. Після вибору потрібного, додаток
на ньому встановиться і автоматично запуститься.
Розглянемо основні файли Java та ресурси додатку.
Клас Activity
У методі OnCreate() йде звернення до методу батьківського класу і установка ресурсу розмітки дизайну:
super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
Також тут створюється тулбар, який видно вгорі програми:
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar);
Також створюється конвертик в рожевому колі, після натискання на який відображається повідомлення:
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
До основних класів можна віднести наступні:
- android.support.design.widget.CoordinatorLayout - клас, який представляє весь інтерфейс, і який є контейнером, що містить інші більш прості елементи.
- CoordinatorLayout містить верхній тулбар програми у вигляді елемента android.support.design.widget.AppBarLayout і нижню область - конвертик в рожевому колі у вигляді елемента android.support.design.widget.FloatingActionButton. А між цими елементами йде включення інтерфейсу, який визначається користувачем: <include layout="@layout/content_main" />
Після компіляції додатку всі ресурси, як для створення графічного інтерфейсу, так і для реалізації програмної частини перетворюються у набір
цілочисельних констант, які зберігаються у файлі R.java.
Загальний опис розроблюваного додатку
Додаток повинен складатися з двох екранів. На першому екрані розміщуються поле для введення повідомлення і кнопка для його відправки. Після
введення користувачем повідомлення і натиснення кнопки "Відправити" повинен з'явитися інший екран із відображенням надісланого повідомлення.
Створення графічного інтерфейсу
Графічний інтерфейс користувача грунтується на ієрархії об'єктів View і ViewGroup.
- Об'єкти View представляють віджети, такі як кнопки або текстові поля.
- Об'єкти ViewGroup є контейнерами для віждетів, що керують їхнім розташуванням і компонуванням.
Обраний при створенні проекту для activity шаблон BlankActivity додає все визначення графічного інтерфейсу в файли activity_main.xml і
content_main.xml, які знаходяться в проекті в папці res / layout.
<?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" > </LinearLayout>
Файл MainActivity.java
import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.Menu; import android.view.MenuItem; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); }}
Як бачимо, що даний клас має наступні методи: onCreate - для підключення розмітки, onCreateOptionsMenu - для створення меню додатку
та onOptionsItemSelected - для реалізації обробки вибору елемента меню.
Для додавання текстового поля всередині елемента LinearLayout створимо елемент EditText. Як і будь-якого об'єкта View, для EditText також треба
оголосити певні xml-атрибути:
<EditText android:id="@+id/edit_message" android:layout_width="wrap_content" android:layout_height="wrap_content" android:hint="@string/edit_message" />
android: id: забезпечує унікальний ідентифікатор віджета, за яким ми можемо посилатися на об'єкт Знак (@) для посилання на контрольний об'єкт у
файлі XML. Після нього йде тип ресурсу (в даному випадку id), слеш і потім ім'я ресурсу (edit_message). Знак плюса (+) перед типом ресурсу необхідно,
коли в перший раз визначається ID ресурсу. При компіляції програми SDK використовує ім'я ID для створення нового ресурсу ID у файлі gen / R.java.
Після цього більше не потрібно вказувати знак плюса.
android: layout_width і android: layout_height: для цих властивостей встановлюється значення wrap_content, яке задасть для віджетів величини, достатні
для відображення в контейнері
android: hint: вказує на текст, який буде відображатися в текстовому полі за замовчуванням, коли воно порожнє. Значення "@ string / edit_message"
посилається на ресурс, визначений в окремому файлі. Оскільки посилання йде на конкретний ресурс, а не на ідентифікатор, то в цьому випадку не
треба вживати знак плюса.
Додавання ресурсів
За замовчуванням проект програми під Android включає файл ресурсів рядків у файлі res / values / strings.xml. Додамо в нього новий рядок edit_message
і встановимо для нього значення "Введіть повідомлення". Також додамо в файл ще один ресурс - button_send і дамо йому значення "Відправити". В
результаті файл strings.xml повинен виглядати так:
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">HelloApplication</string> <string name="action_settings">Settings</string> <string name="edit_message">Введіть повідомлення</string> <string name="button_send">Надіслати</string> </resources>
Додавання кнопки
У випадку з кнопкою її висота і ширина також мають значення wrap_content, тому кнопка буде мати ті розміри, які є достатніми для виведення на ній її
тексту.
<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/button_send" />
Розтягуємо текстове поле на ширину екрану
android:layout_weight="1" - ця властивість приймає значення, яка вказує, яку частину залишку вільного місця контейнера по відношенню до інших
об'єктів даний віджет займе. Наприклад, якщо один віджет у нас буде мати для властивості android: layout_weight значення 2, а інший - значення 1, то то
в сумі вони дадуть 3, тому перший віджет буде займати 2/3 простору, що залишилося, а другий - 1/3.
<?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. Обробка натискання кнопки
Для підключення обробника кнопки необхідно в файлі інтерфейсу activity - activity_main.xml додати в елемент Button атрибут android: onClick:
<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/button_send" android:onClick="sendMessage" />
Значення "sendMessage", присвоєне атрибуту android: onClick, являє собою ім'я методу, визначеного в класі activity, який викликає система при
натисканні користувачем на кнопку.
У класі MainActivity (який розташований в каталозі java /) необхідно додати відповідний метод:
/ ** Метод обробки натискання на кнопку * / public void sendMessage (View view) { // дії, що здійснюються після натискання на кнопку }
Створення об'єкта Intent
Об'єкт Intent представляє такий об'єкт, який допомагає зв'язувати окремі компоненти (наприклад, два об'єкти activity). Intent представляє деяку задачу
додатку.
Усередині методу sendMessage () необхідно створити об'єкт Intent для запуску нового об'єкта activity (DisplayMessageActivity):
Intent intent = new Intent(this, DisplayMessageActivity.class);
Конструктор цього об'єкта приймає два параметри:
Перший параметр представляє контекст - об'єкт Context (ключове слово this вживається тут, так як клас Activity є підкласом класу Context)
Другим параметром йде клас компонента, якому передається об'єкт Intent. В якості нього буде виступати другий об'єкт Activity (DisplayMessageActivity)
Усередині методу sendMessage () необхідно використовувати метод findViewById, щоб отримати елемент EditText і передати значення його тексту в
об'єкт intent:
// Створюємо об'єкт Intent для виклику нової Activity Intent intent = new Intent (this, DisplayMessageActivity.class); // Отримуємо текстове поле в поточній Activity EditText editText = (EditText) findViewById (R.id.edit_message); // отримуємо текст даного текстового поля String message = editText.getText ().ToString (); // Додаємо за допомогою властивості putExtra об'єкт - перший параметр - ключ, // другий параметр - значення цього об'єкта intent.putExtra (EXTRA_MESSAGE, message);
Тепер необхідно визначити в якості змінної класу константу EXTRA_MESSAGE:
public class MainActivity extends Activity { public final static String EXTRA_MESSAGE = "com.sumdu.edu.ua.firstapplication.MESSAGE"; }
Дана константа є ключом об'єкта, який через об'єкт Intent передається в нову activity.
ПРИМІТКА: ключ повинен бути унікальним при взаємодії однієї програми з іншими.
Створення другого об'єкта Activity
Для запуску activity потрібно викликати метод startActivity () і передати йому в якості параметра об'єкт Intent. Після виклику цього методу система
отримає сигнал і запустити новий об'єкт Activity, певний об'єктом Intent. Кінцевий вигляд методу sendMessage () буде наступним:
public void sendMessage (View view) { // Створюємо об'єкт Intent для виклику нової Activity Intent intent = new Intent (this, DisplayMessageActivity.class); // Отримуємо текстове поле в поточній Activity EditText editText = (EditText) findViewById (R.id.edit_message); // отримуємо текст даного текстового поля String message = editText.getText (). ToString (); // Додаємо за допомогою властивості putExtra об'єкт - перший параметр - ключ, // другий параметр - значення цього об'єкта intent.putExtra (EXTRA_MESSAGE, message); // запуск activity startActivity (intent); }
Тепер необхідно додати нову activity - DisplayMessageActivity. Для цього потрібно натиснути правою кнопкою миші в структурі проекту на папку пакета, в
якому знаходиться клас MainActivity, і потім в контекстному меню вибрати New-> Activity-> Blank Activity:
У діалоговому вікні створення нової activity необхідно ввести наступні дані:
- Activity Name: DisplayMessageActivity
- Layout Name: activity_display_message
- Title: DisplayMessageActivity
- Hierarchial Parent: виберемо вже наявний в проекті клас Activity
Виведення повідомлення на екран
Всі використовувані в додатку activity повинні бути оголошені у файлі маніфесту AndroidManifest.xml за допомогою елемента <activity>. Android Studio за
замовчуванням додає відомості про нову activity в цей файл, і якщо ми його відкриємо, то побачимо нову додану activity:
<activity android:name=".DisplayMessageActivity" android:label="@string/title_activity_display_message" android:parentActivityName=".MainActivity" android:theme="@style/AppTheme.NoActionBar" > <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="com.sumdu.edu.ua.firstapplication.MainActivity" /> </activity>
Для отримання об'єкта Intent необхідно викликати метод getIntent і, таким чином, отримати передані з ним дані.
Intent intent = getIntent (); String message = intent.getStringExtra (MainActivity.EXTRA_MESSAGE);
Для виведення повідомлення на екран необхідно створити віджет TextView і за допомогою його властивості setText встановимо його текст.
protected void onCreate (Bundle savedInstanceState) { super.onCreate (savedInstanceState); // Отримуємо повідомлення з об'єкта intent Intent intent = getIntent (); String message = intent.getStringExtra (MainActivity.EXTRA_MESSAGE); // Створюємо текстове поле TextView textView = new TextView (this); textView.setTextSize (40); textView.setText (message); // Встановлюємо текстове поле в системі компонування activity setContentView (textView);}