Upload
others
View
3
Download
0
Embed Size (px)
Citation preview
Занятие 4 (2-й год)
Повторение
- Что такое AVD?
- Что такое SDK?
- Что такое Gradle?
- Что такое MVC?
- Что такое VPN?
- на какой платформе создан Android? (Linux)
- как называется внешний вид экрана? (макет)
- в файле с каким расширением содержится макет? (xml)
- как называется класс, содержащий логику Android-программы? (активность)
- как называется пакет разработчика Android-приложений? (SDK – Android Software Dment
- совпадает ли нумерация версий Android и API(библиотек)? (нет, например 4.1-16)
- какие 2 редактора доступны при создании макета? (визуальный и текстовый)
- как называются элементы управления, размещаемые на макете приложения? (виджеты)
- какой метод вызывается при первом создании активности? (onCreate())
- какое расширение имеет файл проекта под Android? (apk)
- при запуске Android-программы что запускается в первую очередь: активность или
макет?
Жизненный цикл активности
Приложения для Android не имеют метода main.
Их запуск, приостановка и прекращение происходит в соответствии с методами
жизненного цикла активности, которые содержатся в классе AppCompatActivity.
МИНУТКА НЕНАВИСТИ ANDROID-РАЗРАБОТЧИКА
РАЗБИРАЕМ САМЫХ ЧАСТЫХ ПРОБЛЕМ КОДИНГА (Хакер, №5, 2018)
1. Если ты программируешь под Android, то наверняка видел схему жизненного цикла
активности. А знал ли ты жизненный цикл окошка с кнопочками, которое создавал
компилятор старого и доброго Delphi? Я думаю — нет, не знал, и знать тебе это было не
нужно. Интересно, как бы на тебя посмотрели олдскульные дельфисты‐паскалисты, если
бы ты им сказал: «когда пользователь перевернет свой экран, нам надо пересоздать все
формы и восстановить состояние всех компонентов». Скорее всего, они бы пальцем у
виска покрутили. И не только потому, что переворачивать старые мониторы и системные
блоки было не принято. :)
А меж тем Android именно так и устроен: повернул экран — начинай все сначала.
Конечно, в настройках ты можешь отключить поворот экрана, но это не всегда удобно, да
Выполнение
(видимо, на переднем
плане)
Приостановка
(видимо)
Остановка
(невидимо)
Не существует
onPause()
onStop()
onDestroy() onCreate()
onStart()
onResume()
и рядовые пользователи не знают и десяти процентов возможностей своего смартфона.
Поэтому сейчас имеем мы то, что имеем, и единственное, что ты можешь сделать при
разработке, — это отключить в манифесте пересоздание Activity, добавив свойства
android:configChanges="keyboardHidden|orientation|screenSize
Конечно, «знающие люди» так делать не рекомендуют, но такой костыль используют
даже серьезные социальные приложения. Если не веришь — посмотри сам манифесты из
их APK (вот инструкция).
Дело осложняют и сами производители устройств — каждый из них адаптирует ОС к
своим устройствам, меняя в том числе ее поведение. Например, традиционно
рекомендуется сохранять данные при событии onStop(). Пользователь свернул
приложение, и вызвался этот метод. Но есть одна проблема: на некоторых устройствах
вызов этого метода не гарантирован. В таком случае нужно сохранять все, что можешь, в
методе onPause(). Правда, он вызывается не только при выходе из активити, но и при
показе диалогового окна, поэтому нужно предвидеть этот момент и предусматривать
проверки на показ диалога.
Файл манифеста
Основной файл с настройками для целого приложения.
Разработка игры «Угадай число» для Android
В Android Studio выберем Start A New Android Studio Project.
Стоит выбрать более раннюю версию Android, чтобы программа могла работать не только
на новейших устройствах.
В качестве шаблона выберем Empty Activity.
Разработка макета программы
GUI будем создавать в activity_main.xml.
Для разработки макета удобно пользоваться конструктором (вкладка Design).
Элементы управления в Андроид называются виджетами и имеют расширенные
возможности.
Свойства каждого выделенного виджета отображаются на панели справа:
Для удобства разработчика по умолчанию отображаются только основные свойства
виджета:
- идентификатор
- текст
- привязка
Но можно перейти в расширенный режим, нажав кнопку View All Attributes:
Практическая работа
Разработать макет игры.
ВАЖНО
- текст виджетов не менять
- установить размеры текста
- установить привязки (ConstraintLayout)
Самое важное, что надо знать о каждом виджете, это его идентификатор ID.
Идентификатор служит для связи элементов макета с Java-программой.
Идентификаторы виджетов отображаются в дереве компонентов:
И в основных свойствах, где их можно изменить:
Идентификаторы можно приравнять к названиям переменных в Java.
Важно давать осмысленные названия. Изменим идентификаторы, подтверждая связь
через файл ресурсов:
Результат:
Строковые ресурсы
Тексты для отображения пользователям являются ресурсами.
Их выносят в отдельный файл ресурсов:
Добавим нужный нам текст для виджетов.
Пример
Виджет textGame должен содержать текст:
Высокоинтеллектуальная игра "Угадай число"
Этот текст можно ввести прямо в поле свойства
Но лучше нажать на троеточие ... и вызвать форму для создания строкового ресурса:
В результате все разговоры с пользователями будут собраны в одном месте:
Это действительно очень удобно!
Задание
Изменить текст для остальных виджетов:
Примечание:
- не располагайте элементы ниже середины макета, так как виртуальная клавиатура будет
их перекрывать.
- почти все свойства виджетов интуитивно понятны. Но не все :) За выравнивание отвечает
свойство gravity:
- свойства, которые уже использовались автоматом переносятся наверх панели.
Обработчик событий
Элементы управления в Android обрабатываются также, как в любых других средах - с
помощью слушателя событий. Код слушателя событий - это java-код.
Слушатель событий подключить очень просто - для этого есть свойство виджета onClick. В
нем надо написать название метода, в котором будет происходить обработка события.
Например:
Так как этого метода в реальности не существует, то программа выдаст соответствующую
ошибку:
Этот метод можно создать
- вручную
- с помощью мастера
Воспользуемся услугами мастера :)
Перейдем на вкладку Text, найдем строку с ошибкой и нажмем на красную лампочку:
В результате получим сгенерированный код в ActivityMain.java
Пусть нажатие кнопки будет выводить на экран временное уведомление для
пользователя – toast.
Уведомление создается с помощью метода makeText() класса Toast.
Сначала добавим выводимый текст в файл строковых ресурсов:
А теперь добавим код в слушатель кнопки:
Результат: