onUserLeaveHint – вызывается, когда Activity-компонент перемещается на задний план в результате действий пользователя.
onWindowAttributesChanged – вызывается при изменении атрибутов окна.
onWindowFocusChanged – вызывается при потере или получении фокуса окном.
onWindowStartingActionMode – вызывается при запуске режима ActionMode для окна.
Другой метод обратного вызова класса android.app.Activity, который рекомендуется переопределять – это метод onPause (), вызываемый при потере фокуса Activity-компонентом и который предназначен для сохранения состояния Activity-компонента, так как Android-приложение не контролирует полностью жизненный цикл своих компонентов – Android-система может уничтожать приостановленные Activity-компоненты для освобождения ресурсов памяти.
В методе onPause () производится сохранение данных, общих для приложения или для использования другими приложениями, с помощью ContentProvider-компонента, или прямое сохранение измененных данных с помощью объекта SharedPreferences (сохранение пар имя-значение примитивных типов данных), метода openFileOutput () класса android.content.Context (сохранение данных во внутреннем хранилище устройства), метода getCacheDir () класса android.content.Context (кэширование данных), метода getExternalStorageDirectory () класса android. os. Environment (сохранение данных в карте памяти), сохранение данных в базе данных SQLite, в Web-сервисах с использованием пакетов java.net.* и android.net.*.
Использование метода onPause () для сохранения состояния Activity-компонента имеет свои преимущества, по сравнению с применением метода onSaveInstanceState (), так как метод onSaveInstanceState () не будет вызываться Android-системой, если Activity-компонент был уничтожен пользователем, например, нажатием клавиши BACK.
Переопределение методов onCreate (), onStart (), onRestart (), onResume (), onPause (), onStop (), onDestroy () и др. должно сопровождаться вызовом суперкласса с помощью ключевого слова super.
В переопределенном методе onCreate () класса Activity-компонента сгенерированной основы Android-проекта вызывается метод setContentView () класса android.app.Activity, устанавливающий GUI-интерфейс Activity-компонента на основе XML-файла activity_main. xml каталога ресурсов res/layout проекта.
В переопределенном методе onCreateOptionsMenu () класса Activity-компонента сгенерированной основы Android-проекта методом getMenuInflater () получается объект android.view.MenuInflater, отвечающий за создание объектов меню из XML-описания.
Переопределенный метод onOptionsItemSelected () класса Activity-компонента сгенерированной основы Android-проекта представляет каркас обработки выбора элементов меню.
Layout-редактор ADT-плагина
Для работы с XML-описанием GUI-интерфейса Activity-компонента ADT-плагин предлагает визуальный графический редактор.
Layout-редактор ADT-плагина имеет вкладку Graphical Layout для визуального редактирования GUI-интерфейса и XML-вкладку, отображающую код Layout-файла.
XML-код Layout-файла сгенерированной основы Android-проекта Blank Activity определяет GUI-интерфейс, состоящий из RelativeLayout-контейнера, содержащего TextView-компонент.
RelativeLayout-контейнер представлен классом android.widget.RelativeLayout, обеспечивающим компоновку дочерних компонентов android.view.View друг относительно друга и относительно родительского компонента.
Компоновку View-компонентов определяют XML-атрибуты.
Атрибуты android: layout_above и android: layout_below располагают компонент выше или ниже компонента с указанным идентификатором.
Атрибуты android: layout_toLeftOf, android: layout_toStartOf и android: layout_toRightOf, android: layout_toEndOf располагают компонент слева или справа компонента с указанным идентификатором.
Атрибуты android: layout_alignLeft, android: layout_alignStart, android: layout_alignRight, android: layout_alignEnd, android: layout_alignBottom, android: layout_alignTop выравнивают стороны компонента по сторонам компонента с указанным идентификатором.
Атрибут android: layout_alignBaseline выравнивает компонент по базовой линии компонента с указанным идентификатором.
Атрибуты android: layout_alignParentBottom, android: layout_alignParentEnd, android: layout_alignParentTop, android: layout_alignParentStart, android: layout_alignParentLeft, android: layout_alignParentRight располагают компонент внизу, вверху, в левой и в правой части родительского компонента.
Атрибут android: layout_alignWithParentIfMissing со значением true определяет расположение компонента по умолчанию относительно родительского компонента.
Атрибуты android: layout_centerHorizontal, android: layout_centerInParent, android: layout_centerVertical располагают компонент по центральной горизонтальной линии, по центру и по центральной вертикальной линии родительского компонента.
Атрибуты android: layout_marginBottom, android: layout_marginEnd, android: layout_marginLeft, android: layout_marginRight, android: layout_marginStart, android: layout_marginTop определяют отступы компонента.
Атрибуты android: layout_height и android: layout_width указывают размеры компонента, при этом константы FILL_PARENT, MATCH_PARENT и WRAP_CONTENT определяют заполнение родительского компонента, соответствие размерам родительского компонента и соответствие содержимому. Данные атрибуты могут принимать значения в виде px (пиксели), dp (виртуальные пиксели, px = dp * (dpi / 160)), sp (масштабируемые пиксели, основанные на предпочтительном размере шрифта), in (дюймы), mm (миллиметры).
TextView-компонент представлен классом android. widget. TextView, обеспечивающий отображение текста пользователю. XML-атрибуты android: layout_height и android: layout_width со значением «wrap_content» устанавливает высоту и ширину компонента, определяемые размером его содержимого. XML-атрибут android: text со значением @string/hello_world устанавливает текстовое содержимое компонента в виде значения строкового ресурса файла strings. xml Android-проекта с именем hello_world.
Интернационализация
Кнопка Any вкладки Graphical Layout указывает, что данный Android-проект не обеспечивает интернационализацию и локализацию приложения.
Для интернационализации Android-приложения в окне Package Explorer нажмем правой кнопкой мышки на узле проекта и в контекстном меню выберем команду New | Other | Android | Android XML Values File и нажмем кнопку Next. В окне мастера в поле File: введем имя файла strings. xml и нажмем кнопку Next, в списке Optional: Choose a specific configuration to limit the XML to: выберем Language и нажмем кнопку ->. В поле Language введем ru и нажмем кнопку Finish. В результате в каталоге res проекта будет создана папка values-ru с файлом strings. xml.
Для работы с Values-файлами Android-проекта ADT-плагин также предлагает визуальный графический редактор, имеющий вкладку Resources для визуального редактирования и XML-вкладку, отображающую код Values-файла.
Для создания локализованных строк Android-приложения откроем файл strings. xml каталога res/values-ru в редакторе и нажмем кнопку Add вкладки Resources, в предложенном списке выберем элемент String и нажмем кнопку OK. В поле Name введем имя элемента «hello_world», а в поле Value введем строку «Привет!». Еще раз нажмем кнопку Add вкладки Resources, в предложенном списке выберем элемент String и нажмем кнопку OK. В поле Name введем имя элемента «app_name», а в поле Value введем строку «Приложение Андроид». Таким образом, файл strings. xml каталога res/values будет локализован для России.
Откроем файл activity_main. xml каталога ресурсов res/layout Android-проекта и увидим, что кнопка Locale… вкладки Graphical Layout изменилась на список с элементами Russian (ru) (русская версия) b Other (английская версия), при выборе которых в окне конечного вида GUI-интерфейса вкладки Graphical Layout будет отображаться соответствующий текст TextView-компонента.
После инсталляции и запуска Android-приложения в виртуальном устройстве с помощью выбора команды Run As | Android Application контекстного меню окна Package Explorer, нажмем кнопки Home и Settings устройства и выберем настройки Language & keyboard, в настройке Select locale выберем Русский – в результате Android-приложение будет отображать GUI-интерфейс в русской версии.
Другой, более быстрый способ интернационализации Android-приложения – это использование команды Add New Translation кнопки Locale…, открывающей диалоговое окно, в котором список Language позволяет выбрать язык локализации, а поля New Translation – ввести локализованные значения строковых ключей.
Панель инструментов Graphical Layout
Кнопка Android… вкладки Graphical Layout позволяет посмотреть конечный вид GUI-интерфейса относительно установленных версий Android-платформы.
Меню кнопки Configuration… вкладки Graphical Layout позволяет посмотреть конечный вид GUI-интерфейса для различных типов устройств, различных размеров экрана, различных локализаций, фрагментов и версий. Команда Manual Previews в сочетании с командой Add As Thumbnail дает возможность сформировать свой список просмотра.
Команда Create New кнопки Configuration… вкладки Graphical Layout обеспечивает создание альтернативных версий файла activity_main. xml описания GUI-интерфейса Activity-компонента для различных конфигураций Android-устройства. При запуске Android-приложения среда выполнения Android-устройства будет загружать подходящий ее конфигурации Layout-файл. Команда Create New предлагает следующие спецификаторы Android-конфигураций: