Как сделать многоэкранное приложение в android studio
Данная лабораторная работа посвящена различным способам разработки многоэкранных приложений. Предлагается разработать три приложения, каждое из которых посвящено отдельному аспекту этой тематики. По завершению работы над приложениями слушатели смогут разработать собственные программы с использованием изученных компонентов и технологий.
8.2 Создание многоэкранного приложения со списком
1. Создайте проект MultiScreen. В java -файле замените Activity на ListActivity . Класс ListActivity разработан таким образом, что на экране есть только прокручиваемый список и ему не нужна дополнительная разметка. Поэтому файл activity_main.xml можно удалить. Также следует удалить следующую строчку из класса MultiScreen :
т.к. layout - файл мы только что удалили.
2. Теперь нам нужен посредник, который свяжет список и названия элементов этого списка. Для этого в Android есть интерфейс Adapter . Нам потребуется наследник этого класса ArrayAdapter :
В качестве аргументов ArrayAdapter потребует текущий контекст , идентификатор ресурса с разметкой для каждой строки, массив строк.
Мы можем указать в качестве текущего контекста ListActivity (можно использовать ключевое слово this ), готовый системный идентификатор ресурса ( android.R.layout.simple_list_item_1 ) и созданный массив строк ( String[] islands = < "Канары", "Курилы", "Мальдивы", "Филиппины">; ). А выглядеть это будет так:
Обратите внимание на строчку android.R.layout.simple_list_item_1 . В ней уже содержится необходимая разметка для элементов списка. Если вас не устраивает системная разметка, то можете создать собственную разметку в xml-файле и подключить её.
Осталось только подключить адаптер :
3. Теперь нам нужно подключить обработку нажатия. Для этого необходимо знать, на какой пункт списка осуществляется нажатие. Существует специальный интерфейс OnItemClickListener с методом onItemClick() . Подключаем обработчик: getListView().setOnItemClickListener(itemListener); Набираем все в том же onCreate
Если подчеркнётся первое слово , то импортируем нужный класс . Далее подведём курсор ко второму слову new OnItemClickListener . Нам будет предложено добавить метод ( Add unimplemented method ). Соглашаемся и получаем заготовку:
Меняем имена переменных arg на более привычные и понятные
4. Осталось описать, что будет происходить при нажатии на элемент.
По нашей задумке каждый элемент будет открывать новое окно с соответствующим содержимым.
Для начала следует создать еще 4 класса: Canari , Curili , Maldivi , Philippini , и 4 xml-оболочки к ним. Можно просто создать и копировать по одному файлу в обеих директориях, меняя только название и содержимое.
Например, создадим файлы Canari.java и canari.xml типа Activity . Обратите внимание, что как только мы создали ещё один java - файл , нужно записать его в файл манифеста, иначе приложение не будет видеть этот новый класс . Файл AndtoidManifest.xml находится сразу под папкой res. Добавьте код с именем класса в тегах <activity></activity> , сразу под главной активностью.
Строку can нужно создавать в файле strings.xml, также как и другие строки.
Перейдем в файл canari.xml и создадим на экране TextView . Экраны будут отличаться друг от друга картинками. Возьмите 4 любые картинки с вашего компьютера (можете также найти их в интернете) и перетащите из проводника Windows в папку res\drawable. Теперь вы можете поместить элемент ImageView на экран и, выбрав нужную картинку из ресурсов проекта, подключить ее.
Остальные экраны создаются аналогично.
5. Теперь перейдем в главный класс и опишем обработку события onItemClick() . Создадим переключатель , который зависит от номера элемента.
Для запуска нового экрана необходимо создать экземпляр класса Intent и указать класс , на который будем переходить (у нас их 4, поэтому для каждого случая выбираем свою). После этого вызывается метод startActivity() , который и запускает новый экран.
Мы подобрались к очень интересной теме. На всех предыдущих уроках мы создавали приложения, которые содержали только один экран (Activity). Но если вы пользуетесь смартфоном с Android, то вы замечали, что экранов в приложении обычно больше. Если рассмотреть, например, почтовое приложение, то в нем есть следующие экраны: список аккаунтов, список писем, просмотр письма, создание письма, настройки и т.д. Пришла и нам пора научиться создавать многоэкранные приложения.
Application/Library name: TwoActivity
Module name: p0211twoactivity
Package name: ru.startandroid.p0211twoactivity
Откроем activity_main.xml и создадим такой экран:
На экране одна кнопка, по нажатию которой будем вызывать второй экран.
Открываем MainActivity.java и пишем код:
Мы определили кнопку btnActTwo и присвоили ей Activity в качестве обработчика. Реализация метода onClick для кнопки пока заполнена частично - определяем, какая кнопка была нажата. Чуть позже здесь мы будем вызывать второй экран. Но сначала этот второй экран надо создать.
Если помните, при создании проекта у нас по умолчанию создается Activity.
От нас требуется только указать имя этого Activity – обычно мы пишем здесь MainActivity. Давайте разбираться, что при этом происходит.
Мы уже знаем, что создается одноименный класс MainActivity.java – который отвечает за поведение Activity. Но, кроме этого, Activity «регистрируется» в системе с помощью манифест-файла - AndroidManifest.xml.
Давайте откроем этот файл:
Нас интересует тег application. В нем мы видим тег activity с атрибутом name = MainActivity. В activity находится тег intent-filter с определенными параметрами. Пока мы не знаем что это и зачем, сейчас нам это не нужно. Забегая вперед, скажу, что android.intent.action.MAIN показывает системе, что Activity является основной и будет первой отображаться при запуске приложения. А android.intent.category.LAUNCHER означает, что приложение будет отображено в общем списке приложений Android.
Т.е. этот манифест-файл - это что-то типа конфигурации. В нем мы можем указать различные параметры отображения и запуска Activity или целого приложения. Если в этом файле не будет информации об Activity, которое вы хотите запустить в приложении, то вы получите ошибку.
Android Studio при создании модуля создала MainActivity и поместила в манифест данные о нем. Если мы надумаем сами создать новое Activity, то студия также предоставит нам визард, который автоматически добавит создаваемое Activity в манифест.
Давайте создадим новое Activity
Жмем правой кнопкой на package ru.startandroid.p0211twoactivity в папке проекта и выбираем New -> Activity -> Empty Activity
В появившемся окне вводим имя класса – ActivityTwo, и layout – activity_two.
Класс ActivityTwo создан.
В setContentView сразу указан layout-файл activty_two.
Он был создан визардом
Откройте activty_two.xml и заполните следующим кодом:
Экран будет отображать TextView с текстом "This is Activity Two".
Сохраните все. Класс ActivityTwo готов, при отображении он выведет на экран то, что мы настроили в layout-файле two.xml.
Давайте снова заглянем в файл манифеста
Появился тег activity с атрибутом name = .ActivityTwo. Этот тег совершенно пустой, без каких либо параметров и настроек. Но даже пустой, он необходим здесь.
Нам осталось вернуться в MainActivity.java и довершить реализацию метода onClick (нажатие кнопки), а именно - прописать вызов ActivityTwo. Открываем MainActivity.java и добавляем строки:
(добавляете только строки 2 и 3)
Обновите импорт, сохраните все и можем всю эту конструкцию запускать. При запуске появляется MainActivity
Нажимаем на кнопку и переходим на ActivityTwo
Код вызова Activity пока не объясняю и теорией не гружу, урок и так получился сложным. Получилось много текста и скриншотов, но на самом деле процедура минутная. Поначалу, возможно, будет непонятно, но постепенно втянемся. Создадим штук 5-6 новых Activity в разных проектах и тема уляжется в голове.
Пока попробуйте несколько раз пройти мысленно эту цепочку действий и усвоить, что для создания Activity необходимо создать класс (который наследует android.app.Activity) и создать соответствующую запись в манифест-файле.
На следующем уроке:
- разбираемся в коде урока 21
- теория по Intent и Intent Filter (не пропустите, тема очень важная)
- немного о Context
- в чатах решаем возникающие вопросы и проблемы по различным темам: Android, Kotlin, RxJava, Dagger, Тестирование
- ну и если просто хочется поговорить с коллегами по разработке, то есть чат Флудильня
- новый чат Performance для обсуждения проблем производительности и для ваших пожеланий по содержанию курса по этой теме
Для начала запустим Android Studio и создадим пустой проект.
Задаем название приложения, пакет и путь, по которому будет лежать проект:
Указываем минимальную версию Android, поддерживаемую нашим приложением. Google рекомендует использовать версию Android 4.0.3, но для наших целей подойдет и Android версии 2:
Выбираем вкладку Add No Activity и нажимаем Finish:
После создания нового проекта должно появиться следующее окно:
Чтобы увидеть дерево текущего проекта (окно слева) нужно нажать на вкладку Project (слева) или Alt+1.
Создаем 2 класса: MyActivity и MyView. Чтобы добавить класс в наш проект нажимаем правой кнопкой мыши на папке app->java->me.graphica.canvasanimation и выбираем пункт меню New->Java Class.
MyView:
MyActivity:
Осталось зарегистрировать MyActivity в манифесте приложения.
app->manifests->AndroidManifest.xml:
Приложение готово. Чтобы проверить его на устройстве необходимо подключить смартфон через usb-кабель к компьютеру и нажать Shift+F10:
Приложение должно выглядеть следующим образом:
Чтобы избавиться от верхней полоски, в файл app->res->values->styles.xml необходимо добавить следующий блок кода:
и сменить тему приложения в манифесте с
android:theme="@style/AppTheme"
на
android:theme="@style/AppTheme.Fullscreen"
Но смысла в таком пустом приложении немного. Поэтому наполним его графическими примитивами. Для этого достаточно привести класс MyView к следующему виду:
Теперь наше приложение выглядит так:
Это руководство из двух частей описывает расширение приложения Phoneword на второй экран. Оно знакомит с основными конструктивными элементами Android-приложений и подробно рассматривает архитектуру Android
В пошаговых инструкциях вы добавите второй экран в приложение Phoneword, чтобы отслеживать журнал номеров, преобразуемых этим приложением. Итоговое приложение будет иметь второй экран, где отображаются преобразованные номера, как показано на снимке экрана справа:
Прилагаемый подробный обзор описывает полученный результат, а также затрагивает архитектуру, навигацию и другие новые понятия Android, которые вам встретились.
Требования
Так как эта часть начинается с того момента, на котором заканчивается часть Привет, Android, вам нужно сначала изучить Привет, Android: краткое руководство. Если вы хотите перейти сразу к указанному ниже пошаговому руководству, можете скачать готовую версию Phoneword (из части "Привет, Android: краткое руководство") и использовать ее при работе с руководством.
Пошаговое руководство
В этом пошаговом руководстве вы добавите в приложение Phoneword экран Translation History (Журнал преобразований).
Сначала откройте приложение Phoneword в Visual Studio и измените файл Main.axml из обозревателя решений.
Новые выпуски Visual Studio поддерживают открытие XML-файлов в Android Designer.
Android Designer поддерживает как файлы AXML, так и XML.
Обновление макета
На панели элементов перетащите элемент Button в область конструктора и расположите его под элементом TextView TranslatedPhoneWord. В области Свойства замените ИД кнопки на @+id/TranslationHistoryButton .
Задайте для свойства Текст кнопки значение @string/translationHistory . Android Designer интерпретирует это буквально, но вы внесете некоторые изменения, чтобы текст кнопки отображался правильно:
Разверните узел Значения в папке Ресурсы в обозревателе решений и дважды щелкните файл строковых ресурсов Strings.xml:
Добавьте значение и имя строки translationHistory в Strings.xml, а затем сохраните файл:
Текст кнопки Translation History (Журнал преобразований) должен обновиться, отразив новое строковое значение:
Выбрав кнопку Translation History (Журнал преобразований) в области конструктора, найдите параметр enabled в области Свойства и присвойте ему значение false , чтобы отключить кнопку. При этом кнопка в области конструктора темнеет:
Создание второго действия
Создайте вторую операцию для обработки второго экрана. В обозревателе решений щелкните правой кнопкой мыши проект Phoneword и выберите Добавить > Новый элемент. :
Замените код шаблона в файле TranslationHistoryActivity.cs следующим кодом:
В этом классе вы создаете ListActivity и программно заполняете его, поэтому не нужно создавать файл макета для этого действия. Более подробно эти вопросы рассмотрены в разделе Привет, Android (несколько экранов). Подробные сведения.
Добавление списка
Это приложение собирает телефонные номера (которые пользователь преобразовал на первом экране) и передает их на второй экран. Эти номера хранятся в виде списка строк. Для поддержки списков (и целей, которые используются позднее) добавьте следующие директивы using в начало файла MainActivity.cs:
Создайте пустой список, который можно заполнить телефонными номерами. Класс MainActivity будет выглядеть следующим образом:
В классе MainActivity добавьте следующий код, чтобы зарегистрировать кнопку Translation History (Журнал преобразований) (поместите эту строку сразу после объявления translateButton ):
Добавьте в конец метода OnCreate следующий код, чтобы подключить кнопку Translation History (Журнал преобразований):
Измените кнопку Translate (Преобразовать), чтобы добавить телефонный номер в список phoneNumbers . Обработчик Click для translateButton должен иметь вид, аналогичный следующему коду:
Сохраните изменения и выполните сборку приложения, чтобы убедиться в отсутствии ошибок.
Запуск приложения
Разверните приложение в эмуляторе или на устройстве. На следующих снимках экрана показано запущенное приложение Phoneword:
Сначала откройте проект Phoneword в Visual Studio для Mac и измените файл Main.axml из Панели решения.
Новые выпуски Visual Studio поддерживают открытие XML-файлов в Android Designer.
Android Designer поддерживает как файлы AXML, так и XML.
Обновление макета
На панели элементов перетащите элемент Button в область конструктора и расположите его под элементом TextView TranslatedPhoneWord. На панели Свойства замените ИД кнопки на @+id/TranslationHistoryButton :
Задайте для свойства Текст кнопки значение @string/translationHistory . Android Designer интерпретирует это буквально, но вы внесете некоторые изменения, чтобы текст кнопки отображался правильно:
Разверните узел Значения в папке Ресурсы на Панели решения и дважды щелкните файл строковых ресурсов Strings.xml:
Добавьте значение и имя строки translationHistory в Strings.xml, а затем сохраните файл:
Текст кнопки Translation History (Журнал преобразований) должен обновиться, отразив новое строковое значение:
Выбрав кнопку Translation History (Журнал преобразований) в области конструктора, откройте вкладку Поведение на Панели решения и дважды щелкните флажок Включено, чтобы отключить кнопку. При этом кнопка в области конструктора темнеет:
<a name="creating-the-second-activity">Создание второго действия
Создайте вторую операцию для обработки второго экрана. На Панели решения щелкните серый значок шестеренки рядом с проектом Phoneword и выберите Добавить > Новый файл. :
В диалоговом окне Новый файл выберите Android > Действия, укажите имя действия TranslationHistoryActivity и нажмите кнопку Добавить.
Замените код шаблона в TranslationHistoryActivity следующим кодом:
В этом классе вы создаете ListActivity и программно заполняете его, поэтому не нужно создавать файл макета для этого действия. Более подробно эти вопросы рассмотрены в разделе Привет, Android (несколько экранов). Подробные сведения.
Добавление списка
Это приложение собирает телефонные номера (которые пользователь преобразовал на первом экране) и передает их на второй экран. Эти номера хранятся в виде списка строк. Для поддержки списков (и целей, которые используются позднее) добавьте следующие директивы using в начало файла MainActivity.cs:
Создайте пустой список, который можно заполнить телефонными номерами. Класс MainActivity будет выглядеть следующим образом:
В классе MainActivity добавьте следующий код, чтобы зарегистрировать кнопку Translation History (Журнал преобразований) (поместите эту строку сразу после объявления TranslationHistoryButton ):
Добавьте в конец метода OnCreate следующий код, чтобы подключить кнопку Translation History (Журнал преобразований):
Измените кнопку Translate (Преобразовать), чтобы добавить телефонный номер в список phoneNumbers . Обработчик Click для TranslateHistoryButton должен иметь вид, аналогичный следующему коду:
Запуск приложения
Разверните приложение в эмуляторе или на устройстве. На следующих снимках экрана показано запущенное приложение Phoneword:
Читайте также: