DRAFT [2019-2020][ua] at 2023-01-05 17:17:43 +0200
Logo-do [errata] Profile

Програмування для мобільних пристроїв

Початок роботи з Android

Конспект лекції


Початок роботи з Android

Для початку необхідно встановити засоби для розробки. До таких можна віднести:

Встановити середовище розробки Android Studio рекомендується з офіційного ресурсу http://developer.android.com/sdk/index.html

Після встановлення середовища розробки, давайте його запустимо і створимо пустий проект.

У вікні Create New Project потрібно вказати:

Далі вказати тип додатку для операційної системи Android і мінімальну версію ОС, яку повинні підтримувати мобільні пристрої.

Наступним етапом Вам буде запропоновано обрати шаблон проекту. На вибір пропонується декілька шаблонів, які стануть основою вашого додатку.

Далі потрібно вказати назви початкових файлів логіки Java, файлу графічної розмітки макету, титулу та меню.

Після завершення створення проекту можна побачити подібний інтерфейс, поділений на два робочі простори. Зліва - дерево проекту з файлами та

каталогами, справа - робоча область для кодування і створення розміток макетів.

Дерево проекту складається з набору каталогів, які зберігають файли Java, ресурси проекту, бібліотеки, конфігураційні файли та ін.

 

В робочій частині середовища Android Studio можна перемикатися між вкладками з відкритими файлами для редагування. На рисунку нижче відкритий

файл розмітки за замовчуванням, який був створений разом з проектом. Розмітку додатку можна створювати різними способами: використовуючи

редактор із палітрою компонентів та за допомогою коду на мові розмітки XML. Бачимо, щоб змінити інтерфейс створення макету додатку потрібно

перемикатися між вкладками Design і Text, відповідно.  

На рисунку нижче можна побачити стандартну розмітку у вигляді XML.

Після створення пустого проекту його можна запустити. Це можна зробити на реальному пристрої, або використовуючи емулятор (стандартний Android Studio, або сторонній).

Після натискання на кнопку 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);

До основних класів можна віднести наступні:

  1. android.support.design.widget.CoordinatorLayout - клас, який представляє весь інтерфейс, і який є контейнером, що містить інші більш прості елементи.
  2. CoordinatorLayout містить верхній тулбар програми у вигляді елемента android.support.design.widget.AppBarLayout і нижню область - конвертик в рожевому колі у вигляді елемента android.support.design.widget.FloatingActionButton. А між цими елементами йде включення інтерфейсу, який визначається користувачем: <include layout="@layout/content_main" />

Після компіляції додатку всі ресурси, як для створення графічного інтерфейсу, так і для реалізації програмної частини перетворюються у набір

цілочисельних констант, які зберігаються у файлі R.java.

Загальний опис розроблюваного додатку

Додаток повинен складатися з двох екранів. На першому екрані розміщуються поле для введення повідомлення і кнопка для його відправки. Після

введення користувачем повідомлення і натиснення кнопки "Відправити" повинен з'явитися інший екран із відображенням надісланого повідомлення.   

Створення графічного інтерфейсу

Графічний інтерфейс користувача грунтується на ієрархії об'єктів 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 повинні бути оголошені у файлі маніфесту 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);}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


© 2006—2023 СумДУ