M L < ? J @ > :Ю - fit.nsu.rufit.nsu.ru/data_/docs/bak/program/VRMP.pdf · 1. елью дисциплины является подготовка бакалавров, имеющих

Post on 03-Mar-2018

227 Views

Category:

Documents

2 Downloads

Preview:

Click to see full reader

Transcript

ПРОЕКТ ПРОГРАММЫ ДИСЦИПЛИНЫ

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ

РОССИЙСКОЙ ФЕДЕРАЦИИ

Федеральное государственное бюджетное образовательное учреждение высшего

профессионального образования "Новосибирский национальный исследовательский

государственный университет" (Новосибирский государственный университет,

НГУ)

Факультет информационных технологий

УТВЕРЖДАЮ

_______________________

« ___» _____________ 20___г.

РАБОЧАЯ ПРОГРАММА ДИСЦИПЛИНЫ

ВВЕДЕНИЕ В РАЗРАБОТКУ МОБИЛЬНЫХ ПРИЛОЖЕНИЙ

НАПРАВЛЕНИЕ ПОДГОТОВКИ 230100 «ИНФОРМАТИКА И ВЫЧИСЛИТЕЛЬНАЯ

ТЕХНИКА»

Квалификация (степень) выпускника

Бакалавр

Форма обучения очная

Разработка подготовлена в рамках реализации Программы развития НИУ НГУ

на 2009–2018 гг

Новосибирск

2013

Программа дисциплины «Введение в разработку мобильных

приложений» составлена в соответствии с требованиями к обязательному

минимуму содержания и уровню подготовки бакалавра по циклу

«специальных дисциплин» Федеральных государственных образовательных

стандартов высшего профессионального образования по направлению 230100

«Информатика и вычислительная техника».

Автор: Чиркунов Кирилл Сергеевич

Факультет Информационных технологий

Кафедра Систем информатики

Разработка подготовлена в рамках выполнения Программы развития НИУ

НГУ на 2009-2018 гг

1. Целью дисциплины является подготовка бакалавров, имеющих базис специальных

знаний в области информационных технологий для работы в области мобильной

разработки (основы проектирования и программирования мобильных приложений):

изучение базового устройства платформы Android и возможностей, которые

предоставляет данная платформа для разработки мобильных систем, получение

практических навыков по созданию пользовательских интерфейсов, сервисов, а также

по использованию сигнализации, аппаратных сенсоров и стандартных хранилищ

информации в рамках указанной платформы.

2. Задачами дисциплины являются:

получение представления о жизненном цикле приложений и их структуре,

программном манифесте и внешних ресурсах, основных доступных элементах

пользовательского интерфейса, работе с файлами, базами данных, пользовательскими

настройками, разделяемыми данными и межпрограммном взаимодействии.

изучение инструментов для программирования и основ проектирования мобильных

приложений,

исследование программных интерфейсов, обеспечивающих функции телефонии,

отправки/получения SMS, поддержку соединений посредством Wi-Fi/Bluetooth,

исследований возможностей взаимодействия с геолокационными,

картографическими сервисами,

изучение способов создания фоновых служб, сигнализации и подключения механизма

уведомлений,

решение практических задач по созданию представлений, программированию

сервисов, фоновых служб.

Дисциплина входит в вариативную часть профессионального цикла (дисциплины по

выбору студента) образовательной программы бакалавриата по направлению 230100

«Информатика и вычислительная техника».

Требования к первоначальному уровню подготовки обучающихся для успешного

освоения дисциплины:

Уровень «знать»:

Объектно-ориентированный анализ и дизайн;

Паттерны объектно-ориентированного программирования;

Проектирование и создание баз данных.

Уровень «уметь»:

Основы программирование приложений на языке Java;

Желательно: разработка пользовательских интерфейсов.

Дисциплины, последующие по учебному плану:

Итоговая государственная аттестация.

Изучение дисциплины направлено на формирование следующих компетенций:

3. Профессиональные компетенции:

способность применять перспективные методы исследования и решение

профессиональных задач на основе знания мировых тенденций развития

вычислительной техники и информационных технологий (ПК-1);

В результате освоения дисциплины студент должен

Иметь представление о

- фундаментальных отличиях в способах разработки и проектирования мобильных

приложений по сравнению с приложениями для настольных систем,

- области потенциальных задач, которые могут быть решены посредством мобильных

приложений,

- основных компонентах, концепциях, терминах, связанных с платформой Андроид,

- рациональной политике использования вычислительных ресурсов устройства и

обеспечении сохранности пользовательских данных.

Знать

- Когда уместно использовать фоновые процессы и сигнализацию, а когда можно

обойтись и обычными программными представлениями,

- Как работает механизм уведомлений,

- Как обеспечить гибкое управление сторонними сервисами в рамках приложения.

- Модель безопасности и основные права на использование системных функций.

Уметь

- Создавать пользовательские интерфейсы, пользоваться программными функциями,

обеспечивающих поддержку телефонии, отправку/получение SMS, управление

подключениями посредством Wi-Fi, Bluetooth, NFC,

- Программно определять конфигурацию сети, использовать доступные аппаратные

сенсоры для прямой/обратной связи через программные интерфейсы,

- Программировать фоновые службы, механизм уведомлений и сигнализации,

- Наладить взаимодействие приложения с геолокационными и картографическими

сервисами.

4. Структура и содержание курса ««Введение в разработку мобильных приложений»»

Общая трудоемкость дисциплины: 5 зачетных единицы, 180 учебных часов.

N

Тема или раздел

С

е

м

е

с

т

р

Недел

я

семес

тра

Вид образовательных занятий

и объем

Формы

контроля

(по

неделям

семестра)

Формы

итоговой

аттестац

ии (по

семестра

м)

Лек

ции

Сем

ина

ры

Лаб

орат

оны

е

Сам

осто

ятел

ьна

я

рабо

та

A Теоретическая часть 5 1-18 32 32 116 Зачет

Экзамен

1 Раздел 1

Технологический и

системный стек. Базовые

модули ОС. Обзор

достоинств и недостатков

ОС Android. Сравнение с

другими мобильными ОС.

Отличия приложений на

Android от веб- и

настольных приложений

Java.

Настройка среды

разработки. Необходимые

5 1-2 4 4 25 Зачет

может

ставиться

по

результат

ам сдачи

практичес

ких задач

1-4

иннструменты, с которых

требуется начать

знакомство с Android.

История версий и текущая

функциональность.

2 Раздел 2.

Элементы разметки

пользовательских

приложений.

Использование меню.

Элементы управления

пользовательского

интерфейса.

Манифест приложения.

Жизненный цикл формы,

приложения.

Проектирование

интерфейсов для

мобильных устройств и

планшетов.

Проектирование

интерфейсов, не зависящих

от размера экрана.

Фрагменты.

5 3-10 4 4 25 Зачет

может

ставиться

по

результат

ам сдачи

практичес

ких задач

1-4

3 Раздел 3.

Сигнализация. Отложенная

сигнализация.

Картографические

сервисы.

Фоновые службы и

процессы.

Язык AIDL.

Служба компоновки и

создания фрагментов.

Управление камеров.

Управление сенсорами.

Управление сетевыми

соединениями.

Получение информации об

устройстве.

Служба отправки и

получения СМС.

Поддержка протоколов

Bluetooth/Wi-Fi.

Установка шлюза через

Wi-Fi Direct.

Управление анимацией.

Использование NFC.

Служба push-нотификаций.

5 11-15 4 4 25 Зачет

может

ставиться

по

результат

ам сдачи

практичес

ких задач

1-4

Служба уведомлений и

доставки.

Управление потоками и

асинхронными задачами.

4 Раздел 4.

Анимация на основе

ключевых кадров. Техники

программирования,

сохраняющие заряд

батареи.

Энергосберегающие

паттерны

программирования.

Межпроцессное

взаимодействие.

Рекомендации по

написанию мобильных

приложений

5 16-18 4 4 41 Зачет

может

ставиться

по

результат

ам сдачи

практичес

ких задач

1-4

Итого по курсу: 5 32 32 116

5. Образовательные методики и техники

В курсе широко используются актуальные и эффективные техники для более

качественного обучения, социализации:

Обсуждения тем в специальных группах в популярных социальных сетях,

Командная работа,

Удаленные технические консультации и видеоконференции,

Наглядные демонстрации мобильных технологий

Общая доля интерактивных занятий – до 30 %. Общая доля лекций – до 40%.

6. Методическое обеспечение для самоподготовки. Правила оценки заданий и

промежуточной аттестации для студентов.

# Виды самоподготовки Часть курса Рекомендации по

выполнению и

правила оценки

Методологическ

ое обеспечение

1. Решить 4 задачи и

продемонстрировать

код.

Практические

задачи 1-4

Практические

задачи

принимаются в

течение 2-3 недель

с момента, как

были заданы (срок

зависит от степени

сложности задания)

См. Раздел 6.1

4. Подготовка к вопросам

по теоретическим

разделам курса

Теоретическая

часть, разделы

1-5

Выполняют все

студенты. Лектор

выборочно задает

вопросы на

теоретических

занятиях

(длительность

опроса – не более 5

минут до начала

лекции)

См. раздел 6.2 и

7

5. Подготовка к экзамену Теоретическая

часть, разделы

1-5

Итоговая

аттестация в форме

экзамена.

Приблизительно 3

дня на подготовку

См. разделы 6.2

и 7

6.1. Список практических задач

1. «Записная книжка»

Требуется разработать приложение с графическим пользовательским интерфейсом,

поддерживающее создание/редактирование/удаление/поиск заметок.

Два варианта хранения заметок:

А) В базе SQLite.

Б) С использованием файловой системы.

2. «Карманный навигатор»

Создайте приложение с графическим пользовательским интерфейсом с функциями:

- Определение местоположения пользователя на карте Google Map.

- Определение скорости и направления движения пользователя.

- Масштабирование карты.

Программа должна быть конфигурируемой.

Настройки:

- Режим определения местоположения: через GPS либо по сотам.

- Включение/отключение режима поиска.

3. «Песочные часы»

Разработайте приложение-таймер с использованием датчика ориентации в виде

песочных часов. Каждый раз для того чтобы активировать таймер, необходимо

перевернуть экран мобильного устройства вверх ногами. Используйте анимацию для

показа «перетекающего песка» и переворота песочных часов.

Для задания времени перетекания песка требуется разработать push-notification

сервер. Через форму ввода на сервере можно отправлять на клиент (приложение-

таймер) указанное время (числовой ввод).

4. Программа для обмена мгновенными сообщениями.

Требуется разработать приложение для обмена мгновенными сообщениями через Wi-

Fi/Bluetooth.

Поддерживаемые режимы:

1. Активный режим. Приложение занимает весь экран, содержит поля для отправки

сообщений и список принятых сообщений.

2. Режим уведомлений. Приложение через уведомления показывает принятые

сообщения.

6.2. Список контрольных вопросов:

1. Программный стек Android. Виртуальная машина Dalvik.

2. Архитектура Android-приложений.

3. Четыре пункта философии разработки приложений под Android.

4. Приемы для улучшения производительности и уменьшения потребления памяти

для приложений Android.

5. Основные составляющие манифеста приложения.

6. Жизненный цикл мобильного приложения.

7. Разработка интерфейсов, не зависящих от разрешения и плотности пикселов.

8. Intents и Activities. Принципы работы Intent-фильтров.

9. Адаптеры и привязка данных.

10. Работа с интернет-ресурсами.

11. Диалоговые окна: создание и использование.

12. Курсоры, Content Values. Получение данных из SQLite.

13. Фоновые службы, toast-уведомления и сигнализация.

14. Геолокационные и картографические сервисы: конфигурирование и

использование.

15. Сенсорные датчики. Sensor manager.

16. Анимация и спецэффекты.

17. Акселерометр, датчик ориентации и компас: регулировка и программные

функции.

18. Межпроцессное взаимодействие. Язык AIDL.

19. Основные права и полномочия для запуска приложений на устройстве.

20. Работа с настройками сотовой сети, подключение голосовых услуг, получение и

отправка коротких сообщений.

7. Информационное и методологическое обеспечение курса

а) Основная литература:

1) Mayer R. Professional Android 4 Application Development. – Willeyand Sons, 2012.

2) Komatineni S., MacLean D. Pro Android 4. – Apress, 2012.

3) IEEE Standards Association, http://standards.ieee.org .

б) дополнительная литература:

1) Gamma E., Helm R., Johnson R., Vlissides J. Design Patterns: Elements of Reusable

Object-Oriented Software. – Addison-Wesley, 1994.

2) Krum C. Mobile Marketing: Finding your customers No Matter Where They Are. –

Pearson Education, 2010.

в) программное обеспечение и веб-ресурсы:

Android developers online portal, http://developer.android.com.

Channel 9 at MSDN, http://channel9.msdn.com .

Unity3D Documentation, Tutorials and Training, http://unity3d.com/learn/ .

Open handset alliance, http://www.openhandsetalliance.com/ .

Online support for Android and WP8, http://stackoverflow.com .

Official Google developers blog (Android section),

http://googleblog.blogspot.com/search/label/Android .

Windows Phone Developer Blog, http://blogs.windows.com/windows_phone/b/wpdev/ .

Gamasutra: The Art & Business for making games, http://www.gamasutra.com/ .

Moden UI design priciples and guidelines, http://msdn.microsoft.com/en-

us/library/windows/apps/hh779072.aspx.

Android SDK 4.0-4.2 (API 14-17);

Android NDK;

Eclipse For Mobile Developers (Juno or later version, JDT + WST Plug-in);

8. Материально-техническое обеспечение дисциплины

Для проведения лекций: аудитория с мультимедийным проектором и точкой доступа в

Интернет

Для проведения семинаров: терминальный класс с компьютерами, удовлетворяющих

следующим системным требованиям:

ОС Windows XP/Vista/7/8/Server 2003/2008, не менее 4 ГБ RAM, не менее 4 ГБ свободного

места на диске, доступ в Интернет.

Рецензент (ы) _________________________

Программа одобрена на заседании _______________________________

(Наименование уполномоченного органа вуза (УМК, НМС, Ученый совет)

от 2013 года.

Приложение 1. Пример реализации приложения «Записная книжка» (Todo-List)

Установка необходимых программных инструментов

Инструменты разработчика Android содержат вcе необходимые программы и интерфейсы

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

курса. Поскольку приложения для Android запускаются на виртуальной машине Dalvik,

можно писать программы на любой операционной (из нижеперечисленных):

• Microsoft Windows (XP и выше);

• Mac OS X 10.4.8 или выше (только для чипсетов Intel);

• Linux.

Перед началом работы необходимо скачать и установить следующие пакеты:

• SDK Android (инструменты разработчика для Android);

• Java Development Kit (инструменты разработки Java-приложений) (JDK) версии 5, 6 или

выше.

Последнюю версию JDK располагается на сайте компании Sun по адресу

http://java.sun.com/javase/downloads/index.jsp.

Примечание: для создания программ недостаточно иметь установленную среду Java

Runtime Environment (JRE).

Самую последнюю версию SDK можно скачать на сайте для разработчиков Android по

адресу http://developer.android.com/sdk/index.html.

SDK представляет собой ZIP- или EXE- файл, который содержит самую последнюю

версию инструментов разработки Android. Требуется распаковать содержимое файла в

определенную папку.

Прежде чем начать работу, необходимо установить по меньшей мере одну платформу

SDK. Для этого в среде Windows необходимо запустить файл SDK Setup.exe; на MacOS

или Linux — исполняемый файл android, который расположен в подпапке tools. В

появившемся окне следует выбрать слева пункт Available Packages, после чего справа в

области Sources, Packages and Archives (см. рисунок 1).

Рисунок 1. Окно SDK Manager

Начало работы

Требуется отметить пакеты платформы SDK, которые будут установлены. Выбранные

файлы скачаются в папку установки SDK и будут включать библиотеки API,

документацию и несколько примеров приложений.

Все задания в учебном курсе рассчитаны на работу со средой разработки Eclipse с

интегрированным в нее плагином ADT (Инструмент разработки для Android). Тем не

менее, это необязательное требование — разрабатывать программы можно и в Idea IDE, и

в Android Developer Studio, и даже в текстовом редакторе (при определенной сноровке)!

Разработка в среде Eclipse

Eclipse — это среда разработки с открытыми исходными кодами, которая, как правило,

используется для программирования Java-приложений. Скачать ее можно с сайта по

адресу www.eclipse.org/downloads/ и установить на любой платформе, поддерживаемой

Android (Windows, MacOS и Linux).

Есть множество версий Eclipse, однако для Android рекомендуется конфигурация Eclipse

Juno for Mobile Developers (http://www.eclipse.org/downloads/packages/eclipse-mobile-

developers/junosr2):

• плагин Eclipse JDT;

• WST.

WST и плагин JDT входят в состав большинства версий Eclipse.

Чтобы установить Eclipse, распакуйте скачанный архив в новую папку запустите

исполняемый файл eclipse. При первом запуске создайте новую рабочую среду для ваших

проектов.

Работа с плагином для Eclipse

ADT-плагин упрощает разработку приложений для Android путем интеграции

инструментов разработчика, включая эмулятор и конвертор файлов из формата .class в

формат .dex непосредственно в среду Eclipse. Хотя плагин ADT необязателен, он

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

Плагин добавляет в среду Eclipse следующие модули:

• мастер проектов Android, который помогает создавать новые проекты и включает

стандартный шаблон приложения;

• основанный на формах манифест, шаблон и редактор ресурсов, которые помогают

создавать, редактировать и проверять XML-ресурсы проекта;

• автоматическое построение проектов для Android, конвертацию исходных кодов в

исполняемые файлы (.dex), упаковку в файлы пакетов (.apk) и установку пакетов в

виртуальные машины Dalvik;

• менеджер виртуальных устройств Android, позволяющий создавать и управлять

эмуляторами с виртуальными устройствами, на которых имитируется запуск специальных

релизов ОС Android с присутствующими на устройстве ограничениями памяти;

• эмулятор Android с возможностью настройки его интерфейса и изменения установок

сети, а также способностью имитировать входящие звонки и SMS-сообщения;

• службу мониторинга отладки Dalvik (DDMS) с функцией перенаправления портов,

стеком, кучей и возможностью просмотра потоков, информации о процессах и функцией

снятия скриншотов;

• доступ к устройству или файловой системе эмулятора, благодаря чему можно

перемещаться по дереву папок и передавать файлы;

• функцию отладки на этапе выполнения, благодаря чему можно устанавливать точки

остановки и просматривать стеки вызовов;

• журнал событий Android и ВМ Dalvik, а также выводимый в консоль список сообщений.

Установка ADT-плагина

Установите набор инструментов разработчика следующим образом:

1. В меню Eclipse выполнить команду Help�Install New Software.

2. В появившемся диалоговом окне в поле Work With ввести адрес https://dl-

ssl.google.com/android/eclipse/ и нажать Enter.

3. Eclipse запустит поиск плагина ADT. Все найденные плагины будут отображаться в

поле ниже, как показано на рис. Надо отметить пункт Developer Tools и нажать кнопку

Next.

4. Eclipse начнет скачивать плагин. Следует убедиться, что отмечены оба плагина (Android

DDMS и Android Developer Tools) и нажать Next.

5. Прочитайте и согласитесь с условиями лицензионного соглашения (I accept the terms of

the license agreements), нажмите кнопку Next, а затем Finish. Если плагин ADT окажется

неподписанным, вы увидите соответствующее предупреждение перед продолжением

установки.

6. После окончания установки нужно перезапустить Eclipse и задать некоторые настройки

ADT. Закройте и вновь запустите Eclipse, выберите в меню пункты Window�Preferences

или Eclipse�Preferences, если работаете на платформе MacOS.

7. В области слева выберите пункт Android.

8. Нажмите кнопку Browse и укажите путь к папке, в которую вы распаковали архив со

средой разработки Android, затем нажмите кнопку Apply. В списке снизу появятся

доступные модули среды разработки, как показано на рис. 2.3. Нажмите OK, чтобы

завершить установку.

Примечание: Новую версию среды разработки Android следует разместить в другой

директории. После этого вновь понадобится произвести описанную выше настройку,

чтобы указать плагину ADT на новую среду разработки, с помощью которой он будет

строить приложения.

Обновление плагина

Поскольку среда разработки Android постоянно совершенствуется, появляются все новые

обновления для плагина ADT. Для проверки обновлений:

1) Выполнить команду Help�Check for Updates;

2) Если будут обнаружены какие-либо обновления для ADT, их список отобразится в

результатах поиска. Требуется выбрать нужные обновления пакетов и нажать Install.

Приложение «Записная книжка»

В этом примере с нуля будет создано приложение «Записная книжка», использующее

стандартные графические элементы, предоставляемые Android. Основная цель данной

программы — дать базовые практические навыки создания Android-приложений.

1. Чтобы создать новый проект в Eclipse, нужно перейти в меню File ->New->Project и

выбрать пункт Android Application Project(как показано на рис. 2).

Рисунок 2. Создание нового проекта Android-приложения.

2. Далее необходимо ввести подробности о проекте в диалоговом окне, которое

появилось на экране (рис. 3). Application name — это имя приложения (будет показываться

пользователю), поле Create Activity позволяет выбрать имя для своей Активности.

Закончив с вводом данных, нажать кнопку два раза кнопку Next, приняв настройки

приложения и тип главной формы по-умолчанию (рисунок 4 и 5). Потом необходимо

выбрать тип Blank Activity для главной формы приложения (рисунок 6). Затем в поле с

именем MainActivity требуется ввести название главной формы (для текущего примера

это «To-do list», рисунок 7). Затем нажать Finish для создания нового проекта.

Рисунок 3. Описание нового проекта приложения Android

Рисунок 4. Настройка нового проекта.

Рисунок 5. Задание иконки для запуска приложения

Рисунок 6. Выбор шаблона главной формы приложения

Рисунок 7. Ввод имени главной формы приложения.

3. Прежде чем создавать отладочную и рабочую конфигурации, следует создать

виртуальное устройство, на котором будет тестироваться приложение.

3.1. Создание происходит через пункт меню Window->Android Virtual Device Manager. В

появившемся диалоге (рисунок 8) нажать кнопку New.

3.2. Введите имя своего устройства и выберите целевые SDK и разрешение экрана.

Сделайте размер SD-карты больше, чем 8 Мбайт: укажите 20 в поле ввода (рис. 9).

4. Создайте отладочную и рабочую конфигурации. Чтобы это сделать, откройте меню

Run->Debug Configurations и Run->Run Configurations, каждый раз указывая проект

Todo_List и выбирая виртуальное устройство, которое было создано в пункте 3. Можно

оставить действие Launch Default Activity или же явно указать, что при запуске должна

загружаться активность ToDoList.

В этом задании требуется представить пользователям список задач и поле ввода для

добавления новых пунктов. Оба эти элемента есть в библиотеках элементов управления

Android.

Предпочтительный способ для построения пользовательского интерфейса — описание

разметки в виде файлов с ресурсами. Файл main.xml из каталога res/layout содержит

необходимую разметку.

Требуется добавить в файл разметку LinearLayout, EditText и ListBox, как показано в

листинге 1. Представления элементов управления должны содержать уникальные

идентификаторы, чтобы на них можно было ссылаться в коде программы.

Рисунок 8. Создание нового виртуального устройства (эмулятора)

Рисунок 9. Создание нового виртуального устройства

Рисунок 10. Разметка главной формы приложения в файле ресурсов main.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout

xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent">

<EditText

android:id="@+id/myEditText"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="New To Do Item"

android:visibility="gone"

/>

<ListView

android:id="@+id/myListView"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

/>

</LinearLayout>

Листинг 1. Содержимое main.xml

Далее требуется открыть форму ToDoList из каталога с проектом и переопределить метод

OnCreate следующим образом: сначала загружается пользовательский интерфейс с

помощью метода setContentView, затем идет получение ссылок на элементы ListView и

EditText, используя метод findViewById.

public void onCreate(Bundle icicle) {

super.onCreate(icicle);

setContentView(R.layout.main);

myListView = (ListView)findViewById(R.id.myListView);

myEditText = (EditText)findViewById(R.id.myEditText);

}

Затем требуется создать адаптер для элементов списка, который будет извлекать данные

для каждого элемента списка.

public void onCreate(Bundle icicle) {

super.onCreate(icicle);

setContentView(R.layout.main);

myListView = (ListView)findViewById(R.id.myListView);

myEditText = (EditText)findViewById(R.id.myEditText);

todoItems = new ArrayList<ToDoItem>();

int resID = R.layout.todolist_item;

aa = new ToDoItemAdapter(this, resID, todoItems);

myListView.setAdapter(aa);

}

Далее нужно дать возможность пользователю заносить в список новые записи. Для этого

создается обработчик OnKeyListener, который отслеживает нажатие центральной клавиши

на манипуляторе d-pad и заносит содержимое EditText в масссив, оповещая об этом объект

адаптера.

После добавления нового элемента поле ввода очищается.

myEditText.setOnKeyListener(new OnKeyListener() {

public boolean onKey(View v, int keyCode, KeyEvent event)

{

if (event.getAction() == KeyEvent.ACTION_DOWN)

if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {

ToDoItem newItem = new

ToDoItem(myEditText.getText().toString());

toDoDBAdapter.insertTask(newItem);

updateArray();

myEditText.setText("");

aa.notifyDataSetChanged();

cancelAdd();

return true;

}

return false;

}

});

Далее создадим новые внешние ресурсы приложения. Конкретнее – для кнопок

управления удалением и добавлением записей (Add, Remove) и для описания визуальной

темы оформления.

Изображение для кнопок представлено ниже:

Скопируем изображения в каталог res\drawable-mdpi, откроем ресурс string.xml из

каталога res/values и добавим значения для пунктов меню add_new, remove и cancel

(листинг 2).

<?xml version="1.0" encoding="utf-8"?>

<resources>

<string name="hello">Hello World, TodoList!</string>

<string name="app_name">To-do List DB</string>

<string name="add_new">Add New Item</string>

<string name="remove">Remove Item</string>

<string name="cancel">Cancel</string>

</resources>

Листинг 2.

Далее нужно переписать стандартную тему приложения. Для этого styles.xml нужно

изменить так, как указано в листинге 3.

<?xml version="1.0" encoding="utf-8"?>

<resources>

<style name="ToDoTheme" parent="@android:style/Theme.Black">

<item name="android:textSize">12sp</item>

</style>

</resources>

Листинг 3

И, наконец, применить тему в главной форме приложения:

<activity android:name=".ToDoList" …

android:theme="@style/ToDoTheme">

Создание нового представления для элемента списка

Для того чтобы создать представление для элемента списка, которое бы имитировало

оформление бумажного блокнота, следует создать новый View, отнаследовав его от

стандартного элемента TextView. В листинге 4 приведен пример реализации.

import android.content.Context;

import android.content.res.Resources;

import android.graphics.Canvas;

import android.graphics.Paint;

import android.util.AttributeSet;

import android.widget.TextView;

public class TodoListItemView extends TextView {

private Paint marginPaint;

private Paint linePaint;

private int paperColor;

private float margin;

public TodoListItemView (Context context, AttributeSet ats,

int ds) {

super(context, ats, ds);

init();

}

public TodoListItemView (Context context) {

super(context);

init();

}

public TodoListItemView (Context context, AttributeSet attrs)

{

super(context, attrs);

init();

}

private void init() {

// Get a reference to our resource table.

Resources myResources = getResources();

// Create the paint brushes we will use in the onDraw

method.

marginPaint = new Paint(Paint.ANTI_ALIAS_FLAG);

marginPaint.setColor(myResources.getColor(R.color.notepad_margin

));

linePaint = new Paint(Paint.ANTI_ALIAS_FLAG);

linePaint.setColor(myResources.getColor(R.color.notepad_lines));

// Get the paper background color and the margin width.

paperColor = myResources.getColor(R.color.notepad_paper);

margin = myResources.getDimension(R.dimen.notepad_margin);

}

@Override

public void onDraw(Canvas canvas) {

// Color as paper

canvas.drawColor(paperColor);

// Draw ruled lines

canvas.drawLine(0, 0, getMeasuredHeight(), 0, linePaint);

canvas.drawLine(0, getMeasuredHeight(),

getMeasuredWidth(), getMeasuredHeight(),

linePaint);

// Draw margin

canvas.drawLine(margin, 0, margin, getMeasuredHeight(),

marginPaint);

// Move the text across from the margin

canvas.save();

canvas.translate(margin, 0);

// Use the TextView to render the text.

super.onDraw(canvas);

canvas.restore();

}

} Листинг 4

Код в листинге 4 закрашивает экран в соответствии с цветом бумаги, затем рисует линии с

некоторым интервалом (линованная бумага). В конце выполняется отрисовка текста с

отступом для имитации «полей».

Далее следует задать ресурсы цветов оформления в файле colors.xml:

<?xml version="1.0" encoding="utf-8"?>

<resources>

<color name="notepad_paper">#AAFFFF99</color>

<color name="notepad_lines">#FF0000FF</color>

<color name="notepad_margin">#90FF0000</color>

<color name="notepad_text">#AA0000FF</color>

</resources>

Для создания эффекта «поля страницы» опишем файл dimens.xml с заданным отступом

30dp (30 платформонезависимых пиксела):

<?xml version="1.0" encoding="utf-8"?>

<resources>

<dimen name="notepad_margin">30dp</dimen>

</resources>

Сохранение записей в таблице SQLite

Чтобы обеспечить сохранение записей между запусками приложения, будем сохранять

записи в базе данных, а затем считывать их.

Требуется создать класс ToDoDBAdapter для взаимодействия с библиотекой SQLite. Код

приведен в листинге 5.

import java.util.Date;

import android.content.ContentValues;

import android.content.Context;

import android.database.Cursor;

import android.database.SQLException;

import android.database.sqlite.SQLiteException;

import android.database.sqlite.SQLiteDatabase;

import android.database.sqlite.SQLiteOpenHelper;

import android.database.sqlite.SQLiteDatabase.CursorFactory;

import android.util.Log;

public class ToDoDBAdapter {

private static final String DATABASE_NAME = "todoList.db";

private static final String DATABASE_TABLE = "todoItems";

private static final int DATABASE_VERSION = 1;

public static final String KEY_ID = "_id";

public static final String KEY_TASK = "task";

public static final String KEY_CREATION_DATE = "creation_date";

private SQLiteDatabase db;

private final Context context;

private toDoDBOpenHelper dbHelper;

public ToDoDBAdapter(Context _context) {

this.context = _context;

dbHelper = new toDoDBOpenHelper(context, DATABASE_NAME,

null, DATABASE_VERSION);

}

public void close() {

db.close();

}

public void open() throws SQLiteException {

try {

db = dbHelper.getWritableDatabase();

} catch (SQLiteException ex) {

db = dbHelper.getReadableDatabase();

}

}

// Добавляем новую запись

public long insertTask(ToDoItem _task) {

// Создаем новую строку.

ContentValues newTaskValues = new ContentValues();

// Инициализируем значения для каждого столбца.

newTaskValues.put(KEY_TASK, _task.getTask());

newTaskValues.put(KEY_CREATION_DATE, _task.getCreated().getTime());

// Вставляем строку в базу

return db.insert(DATABASE_TABLE, null, newTaskValues);

}

// Удаляем запись из таблицы по индексу

public boolean removeTask(long _rowIndex) {

return db.delete(DATABASE_TABLE, KEY_ID + "=" + _rowIndex, null) > 0;

}

// Обновляем запись

public boolean updateTask(long _rowIndex, String _task) {

ContentValues newValue = new ContentValues();

newValue.put(KEY_TASK, _task);

return db.update(DATABASE_TABLE, newValue, KEY_ID + "=" + _rowIndex, null) > 0;

}

public Cursor getAllToDoItemsCursor() {

return db.query(DATABASE_TABLE,

new String[] { KEY_ID, KEY_TASK, KEY_CREATION_DATE},

null, null, null, null, null);

}

public Cursor setCursorToToDoItem(long _rowIndex) throws SQLException {

Cursor result = db.query(true, DATABASE_TABLE,

new String[] {KEY_ID, KEY_TASK},

KEY_ID + "=" + _rowIndex, null, null, null,

null, null);

if ((result.getCount() == 0) || !result.moveToFirst()) {

throw new SQLException("No to do items found for row: " + _rowIndex);

}

return result;

}

public ToDoItem getToDoItem(long _rowIndex) throws SQLException {

Cursor cursor = db.query(true, DATABASE_TABLE,

new String[] {KEY_ID, KEY_TASK},

KEY_ID + "=" + _rowIndex, null, null, null,

null, null);

if ((cursor.getCount() == 0) || !cursor.moveToFirst()) {

throw new SQLException("No to do item found for row: " + _rowIndex);

}

String task = cursor.getString(cursor.getColumnIndex(KEY_TASK));

long created = cursor.getLong(cursor.getColumnIndex(KEY_CREATION_DATE));

ToDoItem result = new ToDoItem(task, new Date(created));

return result;

}

private static class toDoDBOpenHelper extends SQLiteOpenHelper {

public toDoDBOpenHelper(Context context, String name,

CursorFactory factory, int version) {

super(context, name, factory, version);

}

// Строка запроса на создание базы

private static final String DATABASE_CREATE = "create table " +

DATABASE_TABLE + " (" + KEY_ID + " integer primary key autoincrement, " +

KEY_TASK + " text not null, " + KEY_CREATION_DATE + " long);";

@Override

public void onCreate(SQLiteDatabase _db) {

_db.execSQL(DATABASE_CREATE);

}

@Override

public void onUpgrade(SQLiteDatabase _db, int _oldVersion, int _newVersion) {

Log.w("TaskDBAdapter", "Upgrading from version " +

_oldVersion + " to " +

_newVersion + ", which will destroy all old data");

//удаляем таблицу.

_db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE);

// создаем таблицу заново.

onCreate(_db);

}

}

}

Листинг 5

top related