Учебник Android
Разработка с использованием Android Studio.
Харди Б., Филлипс Б., Стюарт К., Марсикано К. «Android. Программирование для профессионалов» Питер, 2016 год, 640 стр. 2-е изд. (16,4 мб. pdf).
Эта книга — учебник Android, для продуктивной работы с ней необходимы знания языка Java в объеме понимания общих концепций ООП: классы (внутренние, анонимные, обобщенные), объекты, интерфейсы, слушатели, пакеты и т.д.). Учебное пособие базируется на методике курсов Big Nerd Ranch, для подготовки программистов Android. Читать книгу следует с самого начала, так как каждая глава основывается на предыдущем материале, и перескакивать через главы не рекомендуется.
Вы узнаете, как пользоваться интегрированной средой разработки Android Studio, что бы самостоятельно разрабатывать Android приложения, познакомитесь с возможностями Lollipop (мобильной версии), узнаете особенности отладки приложений. Учебник Android представляет не только теоретический но и практический курс программирования, многие главы содержат упражнения, рекомендуемые к выполнению, это даст возможность отработать и повысить навык программирования.
Также вы сможете совместно с авторами написать восемь реальных приложений — два из которых несложны, остальные сложнее. Описание одного из самых сложных занимает одиннадцать глав книги. Все представленные приложения были разработаны для демонстрации важных концепций и приемов программирования для Android.
ISBN 978-5-496-02051-0
Изучение Android 22
Предварительные условия 22
Что нового во втором издании? 23
Как работать с книгой 23
Структура книги 24
Упражнения 24
А вы любознательны? 25
Стиль программирования 25
Версии Android 25
Необходимые инструменты 25
Загрузка и установка Android Studio 26
Загрузка старых версий SDK 26
Альтернативный эмулятор 26
Физическое устройство 27
От издательства 27
Глава 1. Первое приложение Android 28
Основы построения приложения 29
Создание проекта Android 29
Навигация в Android Studio 33
Построение макета пользовательского интерфейса 34
Иерархия представлений 38
Атрибуты виджетов 39
android:layout_width и android:layout_height 39
android:orientation 39
android:text 39
Создание строковых ресурсов 40
Предварительный просмотр макета 41
От разметки XML к объектам View 41
Ресурсы и идентификаторы ресурсов 43
Подключение виджетов к программе 45
Получение ссылок на виджеты 46
Назначение слушателей 47
Анонимные внутренние классы 48
Уведомления 49
Автозавершение 50
Выполнение в эмуляторе 51
Для любознательных: процесс построения приложений Android 54
Средства построения программ Android 55
Глава 2. Android и модель MVC 57
Создание нового класса 58
Генерирование get- и set-методов 58
Архитектура «Модель-Представление-Контроллер» и Android 61
Преимущества MVC 62
Обновление уровня представления 62
Обновление уровня контроллера 65
Запуск на устройстве 69
Подключение устройства69
Настройка устройства для разработки 69
Добавление значка 71
Добавление ресурсов в проект 72
Ссылки на ресурсы в XML 75
Упражнения 76
Упражнение. Добавление слушателя для TextView 76
Упражнение. Добавление кнопки возврата 77
Упражнение. От Button к ImageButton 77
Глава 3. Жизненный цикл активности 79
Регистрация событий жизненного цикла Activity 80
Создание сообщений в журнале 80
Использование LogCat 82
Повороты и жизненный цикл активности 85
Конфигурации устройств и альтернативные ресурсы 86
Создание макета для альбомной ориентации86
Сохранение данных между поворотами 90
Переопределение onSaveInstanceState(Bundle) 91
Снова о жизненном цикле Activity 92
Для любознательных: тестирование onSaveInstanceState(Bundle) 93
Для любознательных: методы и уровни регистрации 94
Глава 4. Отладка приложений Android 96
Исключения и трассировка стека 97
Диагностика ошибок поведения 98
Сохранение трассировки стека 99
Установка точек прерывания 101
Прерывания по исключениям 104
Особенности отладки Android 105
Android Lint 105
Проблемы с классом R 107
Глава 5. Вторая активность 109
Создание второй активности 110
Создание нового макета 110
Создание нового субкласса активности 114
Объявление активностей в манифесте 114
Добавление кнопки Cheat в QuizActivity 115
Запуск активности 117
Передача информации через интенты 117
Интенты явные и неявные 119
Передача данных между активностями 119
Дополнения интентов 119
Получение результата от дочерней активности 123
Передача результата 124
Возвращение интента 125
Обработка результата 127
Ваши активности с точки зрения Android 128
Упражнение 131
Глава 6. Версии Android SDK и совместимость 132
Версии Android SDK 132
Совместимость и программирование Android 133
Разумный минимум 134
Минимальная версия SDK 135
Целевая версия SDK 135
Версия SDK для построения 136
Безопасное добавление кода для более поздних версий API 136
Документация разработчика Android 139
Упражнение. Вывод версии построения 141
Глава 7. UI-фрагменты и FragmentManager 142
Гибкость пользовательского интерфейса 143
Знакомство с фрагментами 144
Начало работы над CriminalIntent 145
Создание нового проекта 147
Фрагменты и библиотека поддержки 148
Добавление зависимостей в Android Studio 150
Создание класса Crime 153
Хостинг UI-фрагментов 154
Жизненный цикл фрагмента 154
Два способа организации хостинга 155
Определение контейнерного представления 155
Создание UI-фрагмента 157
Определение макета CrimeFragment 157
Создание класса CrimeFragment 158
Реализация методов жизненного цикла фрагмента 159
Подключение виджетов во фрагменте 161
Добавление UI-фрагмента в FragmentManager 162
Транзакции фрагментов 163
FragmentManager и жизненный цикл фрагмента 165
Архитектура приложений с фрагментами 166
Почему все наши активности используют фрагменты 167
Для любознательных: почему фрагменты из библиотеки поддержки лучше 168
Для любознательных: использование встроенной реализации фрагментов 169
Глава 8. Макеты и виджеты 170
Обновление Crime 170
Обновление макета 171
Подключение виджетов 173
Подробнее об атрибутах макетов XML 175
Стили, темы и атрибуты тем 175
Плотность пикселов, dp и sp 175
Рекомендации по проектированию интерфейсов Android 177
Параметры макета 177
Поля и отступы 178
Использование графического конструктора 179
Создание альбомного макета 180
Добавление нового виджета 181
Редактирование атрибутов в свойствах 182
Реорганизация виджетов в дереве компонентов 182
Обновление параметров макета потомков 184
Как работает android:layout_weight185
Графический конструктор макетов 186
Идентификаторы виджетов и множественные макеты 186
Упражнение. Форматирование даты 187
Глава 9. Вывод списков и ListFragment 188
Обновление уровня модели CriminalIntent 189
Синглеты и централизованное хранение данных 189
Абстрактная активность для хостинга фрагмента 192
Обобщенный макет для хостинга фрагмента 192
Абстрактный класс Activity 193
Использование абстрактного класса 195
Создание новых контроллеров 195
Объявление CrimeListActivity 196
RecyclerView, Adapter и ViewHolder 197
ViewHolder и Adapter 199
Адаптеры 200
Использование RecyclerView 201
Реализация адаптера и ViewHolder 203
Настройка элементов списка 206
Создание макета элемента списка 207
Использование нового представления элемента списка 208
Щелчки на элементах списка 210
Для любознательных: ListView и GridView 212
Для любознательных: синглеты 212
Глава 10. Аргументы фрагментов 214
Запуск активности из фрагмента 214
Включение дополнения 216
Чтение дополнения 216
Обновление представления CrimeFragment данными Crime 217
Недостаток прямой выборки 218
Аргументы фрагментов 219
Присоединение аргументов к фрагменту 219
Получение аргументов 221
Перезагрузка списка 221
Получение результатов с использованием фрагментов 223
Упражнение. Эффективная перезагрузка RecyclerView 224
Для любознательных: зачем использовать аргументы фрагментов? 225
Глава 11. ViewPager 226
Создание CrimePagerActivity 227
ViewPager и PagerAdapter 228
Интеграция CrimePagerActivity 229
FragmentStatePagerAdapter и FragmentPagerAdapter 232
Для любознательных: как работает ViewPager 234
Для любознательных: формирование макетов представлений в коде 235
Глава 12. Диалоговые окна 237
Библиотека AppCompat 238
Создание DialogFragment 239
Отображение DialogFragment 242
Назначение содержимого диалогового окна 243
Передача данных между фрагментами 245
Передача данных DatePickerFragment 246
Возвращение данных CrimeFragment 248
Назначение целевого фрагмента 249
Передача данных целевому фрагменту 249
Больше гибкости в представлении DialogFragment 253
Упражнение. Новые диалоговые окна 254
Упражнение. DialogFragment255
Глава 13. Панель инструментов 257
AppCompat 258
Использование библиотеки AppCompat 258
Обновление темы 258
Использование AppCompatActivity 259
Меню 261
Определение меню в XML 261
Пространство имен app 263
Android Asset Studio 263
Создание меню 266
Реакция на выбор команд 269
Включение иерархической навигации 270
Как работает иерархическая навигация 271
Альтернативная команда меню 271
Переключение текста команды 273
«Да, и еще одно…»275
Для любознательных: панели инструментов и панели действий 277
Упражнение. Удаление преступлений 278
Упражнение. Множественное число в строках 278
Упражнение. Пустое представление для списка 278
Глава 14. Базы данных SQLite 279
Определение схемы 280
Построение исходной базы данных 281
Решение проблем при работе с базами данных 284
Изменение кода CrimeLab 285
Запись в базу данных 286
Использование ContentValues 286
Вставка и обновление записей 287
Чтение из базы данных 289
Использование CursorWrapper 290
Преобразование в объекты модели 292
Обновление данных модели 294
Для любознательных: другие базы данных 295
Для любознательных: контекст приложения 296
Упражнение. Удаление преступлений 297
Глава 15. Неявные интенты 298
Добавление кнопок 299
Добавление подозреваемого в уровень модели 301
Форматные строки 303
Использование неявных интентов 304
Строение неявного интента 305
Отправка отчета 306
Запрос контакта у Android 308
Получение данных из списка контактов 310
Разрешения контактов 311
Проверка реагирующих активностей 312
Упражнение. ShareCompat 314
Упражнение. Другой неявный интент 314
Глава 16. Интенты при работе с камерой 316
Место для хранения фотографий 316
Включение файлов макетов 317
Внешнее хранилище 319
Выбор места для хранения фотографии 321
Использование интента камеры 322
Разрешения для работы с внешним хранилищем 323
Отправка интента 324
Масштабирование и отображение растровых изображений 325
Объявление функциональности 329
Для любознательных: использование включений 330
Упражнение. Вывод увеличенного изображения 330
Упражнение. Эффективная загрузка миниатюры 331
Глава 17. Двухпанельные интерфейсы 332
Гибкость макета 333
Модификация SingleFragmentActivity 334
Создание макета с двумя контейнерами фрагментов 335
Использование ресурса-псевдонима 337
Создание альтернативы для планшета 338
Активность: управление фрагментами 339
Интерфейсы обратного вызова фрагментов 340
Реализация CrimeFragment.Callbacks 344
Для любознательных: подробнее об определении размера экрана 349
Глава 18. Активы 350
Почему активы, а не ресурсы 351
Создание приложения BeatBox 351
Импортирование активов354
Получение информации об активах 356
Подключение активов для использования 358
Обращение к ресурсам 361
Для любознательных: «не-активы»? 362
Глава 19. Воспроизведение аудио с использованием SoundPool 363
Создание объекта SoundPool 363
Загрузка звуков 364
Воспроизведение звуков 366
Выгрузка звуков 368
Повороты и преемственность объектов 368
Удержание фрагмента 370
Повороты и удержание фрагментов 370
Для любознательных: когда удерживать фрагменты 373
Для любознательных: подробнее о поворотах 373
Глава 20. Стили и темы 376
Цветовые ресурсы 377
Стили 377
Наследование стилей 378
Темы 379
Изменение темы 380
Добавление цветов в тему 382
Переопределение атрибутов темы 384
Исследование тем 384
Изменение атрибутов кнопки 388
Для любознательных: подробнее о наследовании стилей 390
Для любознательных: обращение к атрибутам тем 391
Упражнение. Базовая тема 392
Глава 21. Графические объекты 393
Унификация кнопок 394
Геометрические фигуры 395
Списки состояний 397
Списки слоев 398
Для любознательных: для чего нужны графические объекты XML? 399
Для любознательных: 9-зонные изображения 400
Для любознательных: Mipmap 404
Глава 22. Подробнее об интентах и задачах 407
Создание приложения NerdLauncher 408
Обработка неявного интента 410
Создание явных интентов на стадии выполнения 414
Задачи и стек возврата 416
Переключение между задачами 417
Запуск новой задачи 419
Использование NerdLauncher в качестве домашнего экрана 421
Упражнение. Значки 423
Для любознательных: процессы и задачи 423
Для любознательных: параллельные документы 425
Глава 23. HTTP и фоновые задачи 428
Создание приложения PhotoGallery 430
Основы сетевой поддержки 432
Разрешение на работу с сетью 434
Использование AsyncTask для выполнения в фоновом потоке 435
Главный программный поток 436
Кроме главного потока 437
Загрузка XML из Flickr 438
Разбор текста в формате JSON 443
От AsyncTask к главному потоку 446
Уничтожение AsyncTask 449
Для любознательных: подробнее об AsyncTask 450
Для любознательных: альтернативы для AsyncTask 451
Упражнение. Gson 452
Упражнение. Страничная навигация 452
Упражнение. Динамическая настройка количества столбцов 453
Глава 24. Looper, Handler и HandlerThread 454
Подготовка RecyclerView к выводу изображений 454
Множественные загрузки 457
Взаимодействие с главным потоком 458
Создание фонового потока 459
Сообщения и обработчики сообщений 462
Строение сообщения 462
Строение обработчика 462
Использование обработчиков 463
Передача Handler 467
Для любознательных: AsyncTask и потоки 473
Упражнение. Предварительная загрузка и кэширование 474
Для любознательных: решение задачи загрузки изображений 474
Глава 25. Поиск 476
Поиск в Flickr 477
Использование SearchView 481
Реакция SearchView на взаимодействия с пользователем 484
Простое сохранение с использованием механизма общих настроек 486
Последний штрих 490
Упражнение. Еще одно усовершенствование 491
Глава 26. Фоновые службы 492
Создание IntentService 492
Зачем нужны службы 495
Безопасные сетевые операции в фоновом режиме 495
Поиск новых результатов 497
Отложенное выполнение и AlarmManager 499
Правильное использование сигналов 501
PendingIntent 503
Управление сигналами с использованием PendingIntent 503
Управление сигналом 504
Оповещения 506
Упражнение. Уведомления в Android Wear 509
Для любознательных: подробнее о службах 510
Что делают (и чего не делают) службы 510
Жизненный цикл службы 510
Незакрепляемые службы 511
Закрепляемые службы 511
Привязка к службам 512
Локальная привязка к службам 512
Удаленная привязка к службе 513
Для любознательных: JobScheduler и JobServices 513
Для любознательных: синхронизирующие адаптеры 516
Упражнение. Использование JobService в Lollipop 518
Глава 27. Широковещательные интенты 519
Обычные и широковещательные интенты 519
Пробуждение при загрузке 520
Широковещательные приемники в манифесте 520
Использование приемников 523
Фильтрация оповещений переднего плана 525
Отправка широковещательных интентов 525
Создание и регистрация динамического приемника 526
Ограничение широковещательной рассылки 528
Подробнее об уровнях защиты 531
Передача и получение данных с упорядоченной широковещательной рассылкой 532
Приемники и продолжительные задачи 536
Для любознательных: локальные события 537
Использование EventBus 537
Использование RxJava 538
Для любознательных: проверка видимости фрагмента 539
Глава 28. Просмотр веб-страниц и WebView 541
И еще один блок данных Flickr 542
Простой способ: неявные интенты 544
Более сложный способ: WebView 545
Класс WebChromeClient 549
Повороты в WebView 551
Опасности при обработке изменений конфигурации 553
Для любознательных: внедрение объектов JavaScript 553
Для любознательных: переработка WebView в KitKat 554
Упражнение. Использование кнопки Back для работы с историей просмотра 555
Упражнение. Поддержка других ссылок 555
Глава 29. Пользовательские представления и события касания 557
Создание проекта DragAndDraw 558
Создание класса DragAndDrawActivity 558
Создание класса DragAndDrawFragment 558
Создание нестандартного представления 560
Создание класса BoxDrawingView 560
Обработка событий касания 562
Отслеживание перемещений между событиями 564
Рисование внутри onDraw(…) 566
Упражнение. Сохранение состояния 569
Упражнение. Повороты 569
Глава 30. Анимация свойств 570
Построение сцены 570
Простая анимация свойств 573
Свойства преобразований 576
Выбор интерполятора 578
Изменение цвета 578
Одновременное воспроизведение анимаций 580
Для любознательных: другие API-анимации 582
Старые средства анимации 582
Переходы 583
Упражнения 583
Глава 31. Отслеживание местоположения устройства 584
Местоположение и библиотеки 585
Google Play Services 585
Создание Locatr 586
Play Services и тестирование в эмуляторах 586
Фиктивные позиционные данные 588
Построение интерфейса Locatr 589
Настройка Google Play Services 592
Разрешения 593
Использование Google Play Services 594
Геопоиск Flickr 596
Получение позиционных данных 597
Поиск и вывод изображений 600
Упражнение. Индикатор прогресса 602
Глава 32. Карты 603
Импортирование Play Services Maps 603
Работа с картами в Android 603
Настройка Maps API 604
Получение ключа Maps API 604
Ключ подписания 605
Получение ключа API 606
Создание карты 607
Получение расширенных позиционных данных 608
Работа с картой 611
Рисование на карте 614
Для любознательных: группы и ключи API 616
Глава 33. Материальное оформление 619
Материальные поверхности 620
Возвышение и координата Z 621
Аниматоры списков состояний 623
Средства анимации 624
Круговое раскрытие 624
Переходы между общими элементами 626
Компоненты View 630
Карточки 630
Плавающие кнопки действий 632
Всплывающие уведомления 633
Подробнее о материальном оформлении 634
Послесловие 635
Последнее упражнение 635
Бессовестная самореклама 636
Спасибо 636
Источник