Вы находитесь на странице: 1из 43

MVC в Android

Model-View-Controller
Создание простейшего приложения
Настройка проекта
Имя пакета должно оставаться
неизменным на протяжении
всего срока жизни
приложения!
Это уникальный идентификатор
вашего приложения, который
используется для управления
версиями программы.
Сладкий мир
версий Android

https://developer.android.com/about/
dashboards/index.html
Настройка версий

Если вы не  хотите, чтобы 
приложение работало только
на самых новых устройствах,
стоит выбрать один из более
старых уровней API.
Добавление
активности

Каждое  Android-
приложение состоит из экранов, а
каждый экран состоит из
активности и макета.
Взаимодействие активности и макета
• Активность — одна четко определенная операция, которую
может выполнить пользователь. 
• Макет описывает внешний вид экрана.
Взаимодействие активности и макета

1. Устройство запускает приложение и создает объект


активности.
2. Объект активности задает макет.
3. Активность приказывает Android вывести макет на экран. Активность
Макет
4. Пользователь взаимодействует с макетом, отображаемым на <Layout>

public class MainActivity
extends Activity {
устройстве. </ Layout >

}
...

5. Активность реагирует на эти взаимодействия, выполняя код


приложения.
6. Активность обновляет содержимое экрана... Макет
<Layout>
7. ...и пользователь видит это на устройстве. …
</ Layout >
Настройки
активности
Структура проекта
• Исходные файлы Java и XML Файлы активности и макета, которые были 
созданы за вас мастером.
• Файлы Java, сгенерированные Android Дополнительные файлы Java, которые 
Android Studio тоже генерирует автоматически. Вносить в них изменения не
придется, да и нельзя.
• Файлы ресурсов
К этой категории относятся файлы изображений на значках по умолчанию, стили,
которые могут использоваться вашим приложением, и все общие строковые
данные,  к которым может обращаться приложение.
• Библиотеки Android В окне мастера была указана минимальная 
версия SDK, с которой должно быть совместимо приложение. Android 
Studio включает в приложение библиотеки Android, актуальные для этой версии.
• Файлы конфигурации Файлы конфигурации сообщают Android, 
что содержит приложение и как его следует  выполнять.
Структура проекта
Структура проекта
Структур
а проекта
activity_main.xml
<?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:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="16dp"
android:paddingBottom="16dp"
android:orientation="vertical"
tools:context="com.hfad.myfirstapp.MainActivity">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" />
</LinearLayout>
MainActivity.java
package com.hfad.myfirstapp;

import android.os.Bundle;
import android.app.Activity;

public class MainActivity extends Activity {


@Override protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
Запуск приложения в эмуляторе
Файл APK — файл
пакета приложения
Android. По сути это
1. Файлы с исходным кодом Java архив JAR или ZIP с
компилируются в байт-код. приложением Android.
2. Создается пакет Android-приложения,
или файл APK.
3. Если эмулятор не выполняется в
настоящий момент, он запускается с
AVD.
4. Когда эмулятор будет запущен, а AVD
активизируется, файл APK передается
на AVD и устанавливается.
5. AVD запускает главную активность,
связанную с приложением.
Запуск
приложения
в эмуляторе
Взаимодействие
активности и макета
А что по пиву посоветуете?
Структура приложения
• Макет определяет, как будет выглядеть приложение.
• Файл strings.xml включает все строковые ресурсы, необходимые
макету, — например, текст надписи на кнопке, входящей в макет,
и названия сортов пива.
• Активность определяет, как приложение должно
взаимодействовать с пользователем.
• Класс Java, содержащий логику приложения.
Редактирование макета
Редактирование макета
Параметры кнопки
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Button" />
<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:padding="16dp"
android:orientation="vertical"
tools:context="com.hfad.beeradviser.FindBeerActivity">
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Button" />
extends View
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="This is a text view" />
</LinearLayout>
Файл строковых ресурсов
strings.xml

<resources>
<string name="app_name">Beer Adviser</string>
<string name="find_beer">Find Beer!</string>
<string name="brands">No beers selected</string>

</resources>
Использование строковых ресурсов в
макете
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/find_beer" />
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/brands" />
<string name="string_name">string_value</string>

"@string/string_name"
Раскрывающийся список значений в системе Android.
Компонент предназначен для выбора одного значения из
представленного набора:

<Spinner
android:id="@+id/color"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="40dp"
android:layout_gravity="center"
android:layout_margin="16dp" />
Строковый массив как ресурс
<string-array name="имя_массива">
<item>значение1</item>
<item>значение2</item>
<item>значение3</item>
...
</string-array>

"@array/имя_массива"
strings.xml

<resources>
<string name="app_name">Beer Adviser</string>
<string name="find_beer">Find Beer!</string>
<string name="brands">No beers selected</string>
<string-array name="beer_colors">
<item>light</item>
<item>amber</item>
<item>brown</item>
<item>dark</item>
</string-array>
</resources>
Добавление значений в раскрывающийся
список
<Spinner
android:id="@+id/color"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="40dp"
android:layout_gravity="center"
android:layout_margin="16dp"
android:entries="@array/beer_colors" />
Связывание макета и активности.
Обработка событий
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/find_beer"
android:onClick="onClickFindBeer" />
Связывание макета и активности.
Обработка событий
package com.hfad.beeradviser;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;

public class FindBeerActivity extends Activity {


@Override protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_find_beer);
}
public void onClickFindBeer(View view) {
}
}
FindBeerActivity.java
package com.hfad.beeradviser;

import android.widget.Spinner; import android.widget.TextView;
import java.util.List;

public class FindBeerActivity extends Activity {


private BeerExpert expert = new BeerExpert();

public void onClickFindBeer(View view) {
TextView brands = (TextView) findViewById(R.id.brands);
Spinner colorSpinner = (Spinner) findViewById(R.id.color);
String beerType = String.valueOf(colorSpinner.getSelectedItem());
List<String> brandsList = expert.getBrands(beerType);
StringBuilder brandsFormatted = new StringBuilder();
for (String brand : brandsList) {
brandsFormatted.append(brand).append('\n');
}
brands.setText(brandsFormatted);
}
}
Получение ссылки на компонент
TextView brands =(TextView)findViewById(R.id.brands);

brands.setText(“Мама мыла раму”);


brands.setText(R.string.find_beer);

! R.java генерируется самостоятельно. Вы не сможете изменять код,


находящийся в R, но полезно знать, что он существует.
Получение значения, выбранного в списке
Spinner colorSpinner =
(Spinner) findViewById(R.id.color);
String beerType =
String.valueOf(colorSpinner.getSelectedItem());
package com.hfad.beeradviser;

Класс бизнес-логики
import java.util.ArrayList;
import java.util.List;

public class BeerExpert {


List<String> getBrands(String color) {
List<String> brands = new ArrayList<>();
if (color.equals("amber")) {
brands.add("Jack Amber");
brands.add("Red Moose");
} else {
brands.add("Jail Pale Ale");
brands.add("Gout Stout");
}
return brands;
}
}
Взаимодействие активности и макета

1. Устройство запускает приложение и создает объект


активности.
2. Объект активности задает макет.
3. Активность приказывает Android вывести макет на экран. Активность
Макет
4. Пользователь взаимодействует с макетом, отображаемым на <Layout>

public class MainActivity
extends Activity {
устройстве. </ Layout >

}
...

5. Активность реагирует на эти взаимодействия, выполняя код


приложения.
6. Активность обновляет содержимое экрана... Макет
string.xml <Layout>
7. ...и пользователь видит это на устройстве. <resources> …
… </ Layout >
</resources>
Вспомнить всё
1. Версии Android характеризуются номером версии, уровнем API и кодовым именем.
2. Android Studio — специализированная версия среды IntelliJ IDEA, интегрированная с пакетом
Android Software Development Kit (SDK) и системой сборки Gradle.
3. Типичное Android-приложение состоит из активностей, макетов и файлов ресурсов.
4. Макеты описывают внешний вид приложения. Они хранятся в папке app/src/ main/res/layout.
5. Активности описывают то, что делает приложение и как оно взаимодействует с пользователем.
Созданные вами активности хранятся в папке app/src/main/java.
6. Файл AndroidManifest.xml содержит информацию о самом приложении. Этот файл находится в
папке app/src/main.
7. AVD — виртуальное устройство Android (Android Virtual Device). AVD выполняется в эмуляторе
Android и моделирует физическое устройство Android.
8. APK — пакет приложения Android, аналог JAR-файла для приложений Android. Файл содержит
байт-код приложения, библиотеки и ресурсы. Установка приложения на устройстве
осуществляется установкой его пакета APK.
9. Приложения Android выполняются в отдельных процессах с использованием исполнительной
среды Android (ART).
10. Элемент <TextView> используется для вывода текста.
11. Элемент <Button> используется для добавления кнопки.
12. Элемент <Spinner> используется для добавления раскрывающегося списка.
13. Все компоненты графического интерфейса наследуют от класса Android View.
14. Файл strings.xml содержит пары «имя/значение» для строк. Они используются для вынесения
конкретных текстовых значений из макетов и активностей, а также для поддержки
локализации.
15. Для добавления строк в strings.xml используется синтаксис:
<string name="name">Value</ string>
16. Обращение к строке в макете выглядит так:
"@string/name"
17. Массив строковых значений создается в strings.xml конструкцией следующего вида:
<string-array name="array">
<item>string1</item>
...
</string-array>
18. Для обращения к string-array в макете используется синтаксис:
"@array/array_name"
Вспомнить всё
19. Чтобы при щелчке на кнопке вызывался метод, включите в макет следующий
атрибут:
android:onClick="clickMethod"
При этом в активности должен существовать соответствующий метод:
public void clickMethod(View view){ }
20. Класс R.java генерируется средой. Он позволяет получать ссылки на макеты,
компоненты графического интерфейса, строки и другие ресурсы в коде Java.
21. Метод findViewById() возвращает ссылку на компонент.
22. Метод setText() задает текст компонента.
23. Метод getSelectedItem() возвращает вариант, выбранный в раскрывающемся
списке.
Счастливого программирования!