Android программирование для профессионалов 3 е издание: Android. Программирование для профессионалов. 3-е издание
Android. Программирование для профессионалов. 3-е издание
Руководство для разработчиков.
Филлипс Б., Стюарт К., Марсикано К. «Android. Программирование для профессионалов» Питер, 2017 год, 688 стр., 3-е изд., ISBN: 978-5-4461-0413-0; (17,8 мб. pdf)
Для изучения этой книги вы должны быть знакомы с языком Java, включая: классы и объекты, интерфейсы, слушатели, пакеты, вну-тренние классы, анонимные внутренние классы и обобщенные классы. В третьем издании вы познакомитесь с интегрированной средой Android Studio, которая значительно облегчает разработку ваших приложений. Вы не только изучите основы программирования, но и узнаете о возможностях самых распространенных версий Android. А также новых инструментах, это — макеты с ограничениями и связывание данных, модульное тестирование, средства доступности, архитектурный стиль MVVM, локализации и новой системе разрешений времени выполнения. Все учебные приложения были спроектированы таким образом, чтобы продемонстрировать важные концепции и приемы программирования под Android и дать опыт их практического применения.
Оглавление книги
Содержание
Изучение Android 22
Необходимые инструменты 26
Глава 1. Первое приложение Android 28
Глава 2. Android и модель MVC 57
Глава 3. Жизненный цикл активности 78
Глава 4. Отладка приложений Android 98
Глава 5. Вторая активность 112
Глава 6. Версии Android SDK и совместимость 135
Глава 7. UI-фрагменты и FragmentManager 146
Глава 8. Вывод списков и RecyclerView 177
Глава 9. Создание пользовательских интерфейсов с использованием макетов и виджетов 201
Глава 10. Аргументы фрагментов 221
Глава 11. ViewPager 233
Глава 12. Диалоговые окна 244
Глава 13. Панель инструментов 262
Глава 14. Базы данных SQLite 283
Глава 15. Неявные интенты 302
Глава 16. Интенты при работе с камерой 318
Глава 17. Двухпанельные интерфейсы 332
Глава 18. Локализация 350
Глава 19. Доступность 367
Глава 20. Привязка данных и MVVM 384
Глава 21. Модульное тестирование и воспроизведение звуков 409
Глава 22. Стили и темы 431
Глава 23. Графические объекты 448
Глава 24. Подробнее об интентах и задачах 463
Глава 25. HTTP и фоновые задачи 483
Глава 26. Looper, Handler и HandlerThread 508
Глава 27. Поиск 530
Глава 28. Фоновые службы 546
Глава 29. Широковещательные интенты 572
Глава 30. Просмотр веб-страниц и WebView 593
Глава 31. Пользовательские представления и события касания 608
Глава 32. Анимация свойств 620
Глава 33. Отслеживание местоположения устройства 634
Глава 34. Карты 658
Глава 35. Материальный дизайн 671
Послесловие 686
СкачатьPDF
Похожая литература
528
https://www.htbook.ru/kompjutery_i_seti/programmirovanie/android-programmirovanie-dlya-professionalov-trete-izdaniehttps://www.htbook.ru/wp-content/uploads/2019/03/android-programmirovanie-dlya-professionalov-trete-izdanie.jpghttps://www.htbook.ru/wp-content/uploads/2019/03/android-programmirovanie-dlya-professionalov-trete-izdanie.jpgПрограммирование и БДAndroid,ПрограммированиеРуководство для разработчиков.
Филлипс Б., Стюарт К., Марсикано К. ‘Android. Программирование для профессионалов’ Питер, 2017 год, 688 стр., 3-е изд., ISBN: 978-5-4461-0413-0; (17,8 мб. pdf)
Для изучения этой книги вы должны быть знакомы с языком Java, включая: классы и объекты, интерфейсы, слушатели, пакеты, вну-тренние классы, анонимные внутренние классы и обобщенные классы….SomМихаил
Михайлов[email protected]Техническая литература
Книга «Android. Программирование для профессионалов. 4-е издание»
Привет, Хаброжители! Познакомьтесь с возможностями программирования Android на языке Kotlin! Множество примеров приложений с четкими объяснениями ключевых концепций и API позволят легко разобраться в самых трудных задачах.
Эта книга посвящена прикладным методам разработки приложений на Kotlin, и подойдет для всех версий Android от 5.0 (Lollipop) до 8.1 (Oreo) и выше. Используйте Android Studio для создания приложений, чтобы проверять код на каждом этапе, интегрировать его с другими приложениями, работать с изображениями, воспроизводить аудио и делать многое другое. Каждая глава продумана (и протестирована) так, чтобы вы смогли получить максимум опыта и знания, необходимые для разработки под Android.
Подготовка
Для работы с этой книгой читатель должен быть знаком с языком Kotlin, включая такие концепции, как классы и объекты, интерфейсы, слушатели, пакеты, внутренние классы, анонимные внутренние классы и обобщенные классы.
Без знания этих концепций вы почувствуете себя в джунглях начиная со второй страницы. Лучше начните с вводного учебника по Kotlin и вернитесь к этой книге после его прочтения. Сегодня существует много превосходных книг для начинающих; подберите нужный вариант в зависимости от своего опыта программирования и стиля обучения. Мы рекомендуем книгу Kotlin Programming: The Big Nerd Ranch Guide.
Если вы хорошо разбираетесь в концепциях объектно-ориентированного программирования, но успели малость подзабыть Kotlin, скорее всего, все будет нормально. Мы приводим краткие напоминания о некоторых специфических возможностях Kotlin (таких как интерфейсы и анонимные внутренние классы). Держите учебник по Kotlin наготове на случай, если вам понадобится дополнительная информация во время чтения.
Что нового в четвертом издании?
В этом издании мы провели капитальный ремонт и изменили буквально каждую главу. Самое большое изменение заключается в том, что программы теперь написаны на Kotlin, а не на Java. Поэтому неофициальным рабочим названием этого издания было «Android 4K».
Еще одно радикальное изменение — включение библиотек компонентов Android Jetpack. Теперь мы используем Jetpack-библиотеки (их еще называют AndroidX) вместо Support Library. Кроме того, мы включили новые API Jetpack, где это было уместно. Например, мы используем ViewModel для сохранения состояния пользовательского интерфейса при вращении. Мы используем Room и LiveData для реализации базы данных и запросов данных из нее. А для планирования фоновой работы мы используем WorkManager. И это лишь часть нововведений. В этой книге компоненты Jetpack в той или иной мере вплетены во все проекты.
Чтобы сфокусироваться на том, как разрабатываются современные приложения для Android, в этой книге используются библиотеки сторонних разработчиков, а не только API в пределах данного фреймворка или Jetpack. Один из примеров — отказ от HttpURLConnection и других сетевых API нижнего уровня в пользу использования Retrofit и его зависимых библиотек. Мы тем самым сильно отходим от наших предыдущих книг, но считаем, что такой подход подготовит вас к погружению в профессиональную разработку приложений после прочтения нашей книги. Выбранные библиотеки мы используем в повседневной жизни, разрабатывая приложения на Android для наших клиентов.
Как работать с книгой
Эта книга не справочник. Мы старались помочь в преодолении начального барьера, чтобы вы могли извлечь максимум пользы из существующих справочников и пособий. Книга основана на материалах пятидневного учебного курса в Big Nerd Ranch. Соответственно предполагается, что вы будете читать ее с самого начала. Каждая глава базируется на предшествующем материале, и пропускать главы не рекомендуется.
На наших занятиях студенты прорабатывают эти материалы, но в обучении также важно и другое — ваш настрой и обстановка.
Желательно, чтобы ваша учебная среда была похожа на нашу. В частности, стоит хорошенько высыпаться и найти спокойное место для работы. Следующие факторы тоже сыграют положительную роль:
— Создайте учебную группу с друзьями или коллегами.
— Выделяйте время, когда вы будете заниматься исключительно чтением книги.
— Примите участие в работе форума книги на сайте forums.bignerdranch.com.
— Найдите специалиста по Android, который поможет вам в трудный момент.
Структура книги
В этой книге мы напишем семь приложений для Android. Два приложения очень просты, и на их создание уходит всего одна глава. Другие приложения часто оказываются более сложными, а самое длинное приложение занимает 11 глав. Все приложения спроектированы так, чтобы продемонстрировать важные концепции и приемы и дать опыт их практического применения.
GeoQuiz
В первом приложении мы исследуем основные принципы создания проектов Android, activity, макеты и явные интенты. Вы также научитесь без проблем работать с конфигурацией.
CriminalIntent
Самое большое приложение в книге предназначено для хранения информации о проступках ваших коллег по офису. Вы научитесь использовать фрагменты, интерфейсы «главное-детализированное представление», списковые интерфейсы, меню, камеру, неявные интенты и многое другое.
BeatBox
Наведите ужас на своих врагов и узнайте больше о фрагментах, воспроизведении мультимедийного контента, архитектуре MVVM, связывании данных, тестировании, темах и графических объектах.
NerdLauncher
Нестандартный лаунчер раскроет тонкости работы системы интентов, процессов и задач.
PhotoGallery
Клиент Flickr для загрузки и отображения фотографий из общедоступной базы Flickr. Приложение демонстрирует работу со службами, многопоточное программирование, обращения к веб-службам и т. д.
DragAndDraw
В этом простом графическом приложении рассматривается обработка событий касания и создание нестандартных представлений.
Sunset
В этом крохотном приложении вы создадите красивое представление заката над водой, а заодно освоите тонкости анимации.
Версии Android
Мы будем говорить о версиях Android, широко используемых на момент написания книги. Для данного издания это версии Android 5.0 (Lollipop, API уровня 21) — Android 9.0 (Pie, API уровня 28). Несмотря на то что более старые версии все еще используются, нам кажется, что усилия, требуемые для поддержки этих версий, того не стоят.
Если вы хотите получить информацию о поддержке версий Android ранее 5.0, вы можете почитать предыдущие издания этой книги. Третье издание было нацелено на Android 4.4 и выше, второе — на Android 4.1 и выше, а первое — на Android 2.3 и выше.
Даже после выхода новых версий Android приемы, изложенные в книге, будут работать благодаря политике обратной совместимости Android (подробности см. в главе 7). На сайте forums.bignerdranch.com будет публиковаться информация об изменениях, а также комментарии по поводу использования материала книги с последними версиями.
Подробнее об интентах и задачах
В этой главе мы используем неявные интенты для создания приложения-лаунчера, заменяющего стандартный лаунчер Android. На рис. 23.1 показано, как будет выглядеть приложение NerdLauncher.
NerdLauncher выводит список приложений на устройстве. Пользователь нажимает элемент списка, чтобы запустить соответствующее приложение.
Чтобы приложение работало правильно, нам придется углубить свое понимание интентов, фильтров интентов и схем взаимодействий между приложениями в среде Android.
Создание приложения NerdLauncher
В Android Studio выберите команду File ⇒ New Project, чтобы создать новый проект. Выберите пункт Add No Activity на вкладке Phone and Tablet. Присвойте приложению название NerdLauncher и назначьте имя пакета com.bignerdranch.android.nerdlauncher. Установите флажок Use AndroidX artifacts, а остальные настройки не изменяйте.
После инициализации проекта в Android Studio создайте новую пустую activity, выбрав команду File ⇒ New ⇒ Activity ⇒ Empty Activity. Присвойте activity имя NerdLauncherActivity и установите флажок Launcher Activity.
NerdLauncherActivity отображает список названий приложений в RecyclerView. Добавьте зависимость androidx.recyclingerview:recyclingerview:1.0.0 в файл app/build.gradle, как вы делали это в главе 9. Если вы хотите использовать более новые версии RecyclerView, их можно найти по ссылке developer.android.com/jetpack/androidx/releases/reecycleerview.
Измените содержимое файла res/layout/activity_nerd_launcher.xml в части кода RecyclerView, как показано в листинге 23.1.
Листинг 23.1. Обновление макета NerdLauncherActivity (layout/activity_nerd_launcher.xml)
<?xml version="1.0" encoding="utf-8"?>
<androidx.recyclerview.widget.RecyclerView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/app_recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
Откройте файл NerdLauncherActivity.kt и спрячьте ссылку на объект RecyclerView в свойстве (уже скоро мы подключим данные к RecyclerView).
Листинг 23.2. Базовая реализация NerdLauncherActivity (NerdLauncherActivity.kt)
class NerdLauncherActivity : AppCompatActivity() {
private lateinit var recyclerView: RecyclerView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_nerd_launcher)
recyclerView = findViewById(R.id.app_recycler_view)
recyclerView.layoutManager = LinearLayoutManager(this)
}
}
Запустите приложение и убедитесь в том, что пока все компоненты взаимодействуют правильно. Если все сделано без ошибок, вы становитесь владельцем приложения NerdLauncher, в котором отображается пустой виджет RecyclerView (рис. 23.2).
Обработка неявного интента
NerdLauncher отображает список запускаемых (launchable) приложений на устройстве. («Запускаемым» называется приложение, которое может быть запущено пользователем, если он щелкнет на значке на «Главном экране» или на экране лаунчера.) Для этого NerdLauncher запрашивает у системы список запускаемых главных activity.
Package Manager, о котором мы говорили в главе 15, используется для разрешения activity. У запускаемых главных activity фильтры интентов включают действие MAIN и категорию LAUNCHER. Вы уже видели в своих проектах фильтр интентов в файле manifests/AndroidManifest.xml:
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
Когда NerdLauncherActivity стал запускающей activity, фильтры интентов добавляются автоматически. (Проверьте манифест, если хотите.)
В файле NerdLauncherActivity.kt добавьте функцию setupAdapter() и вызовите его из onCreateView(…). (Позднее эта функция создаст экземпляр RecyclerView.Adapter и назначит его объекту RecyclerView, но пока она просто генерирует список данных приложения.)
Также создайте неявный интент и получите список activity, соответствующих интенту, от PackageManager. Пока мы ограничимся простой регистрацией количества activity, возвращенных PackageManager.
Листинг 23.3. Получение информации у PackageManager (NerdLauncherActivity.kt)
private const val TAG = "NerdLauncherActivity"
class NerdLauncherActivity : AppCompatActivity() {
private lateinit var recyclerView: RecyclerView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_nerd_launcher)
recyclerView = findViewById(R.id.app_recycler_view)
recyclerView.layoutManager = LinearLayoutManager(this)
setupAdapter()
}
private fun setupAdapter() {
val startupIntent = Intent(Intent.ACTION_MAIN).apply {
addCategory(Intent.CATEGORY_LAUNCHER)
}
val activities = packageManager.queryIntentActivities(startupIntent, 0)
Log.i(TAG, "Found ${activities.size} activities")
}
}
Здесь мы создаем неявный интент с заданным действием ACTION_MAIN. Переменная CATEGORY_LAUNCHER добавлена в категории интента.
Вызов PackageManager.requestIntentActivities(Intent, Int) возвращает список, содержащий ResolveInfo для всех activity, у которых есть фильтр, соответствующий данному интенту. Вы можете указать флаги для изменения результатов. Например, флаг PackageManager.GET_SHARED_LIBRARY_FILES заставляет запрос включать в результаты дополнительные данные (пути к библиотекам, которые связаны с каждым приложением, удовлетворяющим требованиям). Здесь вы передаете 0, что указывает на то, что вы не хотите изменять результаты.
Запустите приложение NerdLauncher и посмотрите в выводе LogCat, сколько приложений вернул экземпляр PackageManager (у нас при первом пробном запуске их было 30).
В CriminalIntent для отправки отчетов использовался неявный интент. Чтобы представить на экране список выбора приложений, мы создали неявный интент, упаковали его в интент выбора и отправили ОС вызовом startActivity(Intent):
val intent = Intent(Intent.ACTION_SEND)
... // Создание и размещение дополнений интентов
chooserIntent = Intent.createChooser(intent, getString(R.string.send_report)
startActivity(chooserIntent)
Почему мы не используем этот подход здесь? Вкратце: дело в том, что фильтр интентов MAIN/LAUNCHER может соответствовать или не соответствовать неявному интенту MAIN/LAUNCHER, отправленному через startActivity(Intent).
Оказывается, вызов startActivity(Intent) не означает «Запустить activity, соответствующую этому неявному интенту». Он означает «Запустить activity по умолчанию, соответствующую этому неявному интенту». Когда вы отправляете неявный интент с использованием startActivityForResult(Intent) (или startActivity(…)), ОС незаметно включает в интент категорию Intent.CATEGORY_DEFAULT.
Таким образом, если вы хотите, чтобы фильтр интентов соответствовал неявным интентам, отправленным через startActivity(Intent), вы должны включить в этот фильтр интентов категорию DEFAULT.
Activity с фильтром интентов MAIN/LAUNCHER является главной точкой входа приложения, которому она принадлежит. Для нее важно лишь то, что она является главной точкой входа приложения, а является ли она главной точкой входа «по умолчанию» — несущественно, поэтому она не обязана включать категорию CATEGORY_DEFAULT.
Так как фильтры интентов MAIN/LAUNCHER могут не включать CATEGORY_DEFAULT, надежность их соответствия неявным интентам, отправленным вызовом startActivity(Intent), не гарантирована. Поэтому мы используем интент для прямого запроса у PackageManager информации об activity с фильтром интентов MAIN/LAUNCHER.
Следующий шаг — отображение меток этих activity в списке RecyclerView экземпляра NerdLauncherFragment. Метка (label) activity представляет собой отображаемое имя — нечто, понятное пользователю. Если учесть, что эти activity относятся к лаунчеру, такой меткой, скорее всего, должно быть имя приложения.
Метки activity вместе с другими метаданными содержатся в объектах ResolveInfo, возвращаемых PackageManager.
Сначала отсортируйте объекты ResolveInfo, возвращаемые PackageManager, в алфавитном порядке меток, получаемых функцией ResolveInfo.loadLabel
(PackageManager).
Листинг 23.4. Алфавитная сортировка (NerdLauncherActivity.kt)
class NerdLauncherActivity : AppCompatActivity() {
...
private fun setupAdapter() {
val startupIntent = Intent(Intent.ACTION_MAIN).apply {
addCategory(Intent.CATEGORY_LAUNCHER)
}
val activities = packageManager.queryIntentActivities(startupIntent, 0)
activities.sortWith(Comparator { a, b ->
String.CASE_INSENSITIVE_ORDER.compare(
a.loadLabel(packageManager).toString(),
b.loadLabel(packageManager).toString()
)
})
Log.i(TAG, "Found ${activities.size} activities")
}
}
Теперь определите класс ViewHolder для отображения метки activity. Сохраните объект ResolveInfo activity в переменной класса (позднее мы еще не раз используем его).
Листинг 23.5. Реализация ViewHolder (NerdLauncherActivity.kt)
class NerdLauncherActivity : AppCompatActivity() {
...
private fun setupAdapter() {
...
}
private class ActivityHolder(itemView: View) :
RecyclerView.ViewHolder(itemView) {
private val nameTextView = itemView as TextView
private lateinit var resolveInfo: ResolveInfo
fun bindActivity(resolveInfo: ResolveInfo) {
this.resolveInfo = resolveInfo
val packageManager = itemView.context.packageManager
val appName = resolveInfo.loadLabel(packageManager).toString()
nameTextView.text = appName
}
}
}
Затем добавьте реализацию RecyclerView.Adapter.
Листинг 23.6. Реализация RecyclerView.Adapter (NerdLauncherActivity.kt)
class NerdLauncherActivity : AppCompatActivity() {
...
private class ActivityHolder(itemView: View) :
RecyclerView.ViewHolder(itemView) {
...
}
private class ActivityAdapter(val activities: List<ResolveInfo>) :
RecyclerView.Adapter<ActivityHolder>() {
override fun onCreateViewHolder(container: ViewGroup, viewType: Int):
ActivityHolder {
val layoutInflater = LayoutInflater.from(container.context)
val view = layoutInflater
.inflate(android.R.layout.simple_list_item_1, container, false)
return ActivityHolder(view)
}
override fun onBindViewHolder(holder: ActivityHolder, position: Int) {
val resolveInfo = activities[position]
holder.bindActivity(resolveInfo)
}
override fun getItemCount(): Int {
return activities.size
}
}
}
Здесь мы заполняем файл android.R.layout.simple_list_item_1 в функции onCreateViewHolder(…). Файл simple_list_item_1 layout является частью фреймворка Android, поэтому вы ссылаетесь на него как на layout android.R.layout, а не как на R.layout. В нем содержится один TextView.
Наконец, измените код функции setupAdapter(), чтобы она создавала экземпляр ActivityAdapter и назначала его адаптером RecyclerView.
Листинг 23.7. Назначение адаптера RecyclerView (NerdLauncherActivity.kt)
class NerdLauncherActivity : AppCompatActivity() {
...
private fun setupAdapter() {
...
Log.i(TAG, "Found ${activities.size} activities")
recyclerView.adapter = ActivityAdapter(activities)
}
...
}
Запустите NerdLauncher; вы увидите список RecyclerView, заполненный метками activity (рис. 23.3).
Создание явных интентов на стадии выполнения
Мы использовали неявный интент для сбора информации об activity и выводе ее в формате списка. Следующим шагом должен стать запуск выбранной activity при нажатии пользователем на элементе списка. Для запуска activity будет использоваться явный интент.
Для создания явного интента необходимо извлечь из ResolveInfo имя пакета и имя класса activity. Эти данные можно получить из части ResolveInfo с именем ActivityInfo. (О том, какие данные доступны в разных частях ResolveInfo, можно узнать из документации: developer.android.com/reference/kotlin/android/content/pm/ResolveInfo.html.)
Реализуйте в ActivityHolder слушателя нажатий. При нажатии на activity в списке по данным ActivityInfo этой activity создайте явный интент. Затем используйте этот явный интент для запуска выбранной activity.
Листинг 23.8. Запуск выбранной activity (NerdLauncherActivity.kt)
class NerdLauncherActivity : AppCompatActivity() {
...
private class ActivityHolder(itemView: View) :
RecyclerView.ViewHolder(itemView),
View.OnClickListener {
private val nameTextView = itemView as TextView
private lateinit var resolveInfo: ResolveInfo
init {
nameTextView.setOnClickListener(this)
}
fun bindActivity(resolveInfo: ResolveInfo) {
...
}
override fun onClick(view: View) {
val activityInfo = resolveInfo.activityInfo
val intent = Intent(Intent.ACTION_MAIN).apply {
setClassName(activityInfo.applicationInfo.packageName,
activityInfo.name)
}
val context = view.context
context.startActivity(intent)
}
}
...
}
Обратите внимание: в этом интенте мы отправляем действие как часть явного интента. Большинство приложений ведет себя одинаково независимо от того, включено действие или нет, однако некоторые приложения могут изменять свое поведение. Одна и та же activity может отображать разные интерфейсы в зависимости от того, как она была запущена. Вам как программисту лучше всего четко объявить свои намерения и позволить activity запуститься так, как они считают нужным.
В листинге 23.8 мы получаем имя пакета и имя класса из метаданных и используем их для создания явной activity функцией Intent:
fun setClassName(packageName: String, className: String): Intent
Этот способ отличается от того, который использовался нами для создания явных интентов в прошлом. Ранее мы использовали конструктор Intent, получающий объекты Context и Class:
Intent(packageContext: Context, cls: Class<?>)
Этот конструктор использует свои параметры для получения того, в чем Intent реально нуждается — ComponentName, имени пакета, объединенного с именем класса. Когда вы передаете Activity и Class для создания Intent, конструктор определяет полное имя пакета по Activity.
fun setComponent(component: ComponentName): Intent
Однако решение с функцией setClassName(…), автоматически создающей имя компонента, получается более компактным.
Запустите NerdLauncher и посмотрите, как работает запуск приложений.
» Более подробно с книгой можно ознакомиться на сайте издательства
» Оглавление
» Отрывок
Для Хаброжителей скидка 25% по купону — Android
По факту оплаты бумажной версии книги на e-mail высылается электронная книга.
Книга «Android. Программирование для профессионалов. 4-е издание»
Привет, Хаброжители! Познакомьтесь с возможностями программирования Android на языке Kotlin! Множество примеров приложений с четкими объяснениями ключевых концепций и API позволят легко разобраться в самых трудных задачах.
Эта книга посвящена прикладным методам разработки приложений на Kotlin, и подойдет для всех версий Android от 5.0 (Lollipop) до 8.1 (Oreo) и выше. Используйте Android Studio для создания приложений, чтобы проверять код на каждом этапе, интегрировать его с другими приложениями, работать с изображениями, воспроизводить аудио и делать многое другое. Каждая глава продумана (и протестирована) так, чтобы вы смогли получить максимум опыта и знания, необходимые для разработки под Android.
Подготовка
Для работы с этой книгой читатель должен быть знаком с языком Kotlin, включая такие концепции, как классы и объекты, интерфейсы, слушатели, пакеты, внутренние классы, анонимные внутренние классы и обобщенные классы.
Без знания этих концепций вы почувствуете себя в джунглях начиная со второй страницы. Лучше начните с вводного учебника по Kotlin и вернитесь к этой книге после его прочтения. Сегодня существует много превосходных книг для начинающих; подберите нужный вариант в зависимости от своего опыта программирования и стиля обучения. Мы рекомендуем книгу Kotlin Programming: The Big Nerd Ranch Guide.
Если вы хорошо разбираетесь в концепциях объектно-ориентированного программирования, но успели малость подзабыть Kotlin, скорее всего, все будет нормально. Мы приводим краткие напоминания о некоторых специфических возможностях Kotlin (таких как интерфейсы и анонимные внутренние классы). Держите учебник по Kotlin наготове на случай, если вам понадобится дополнительная информация во время чтения.
Что нового в четвертом издании?
В этом издании мы провели капитальный ремонт и изменили буквально каждую главу. Самое большое изменение заключается в том, что программы теперь написаны на Kotlin, а не на Java. Поэтому неофициальным рабочим названием этого издания было «Android 4K».
Еще одно радикальное изменение — включение библиотек компонентов Android Jetpack. Теперь мы используем Jetpack-библиотеки (их еще называют AndroidX) вместо Support Library. Кроме того, мы включили новые API Jetpack, где это было уместно. Например, мы используем ViewModel для сохранения состояния пользовательского интерфейса при вращении. Мы используем Room и LiveData для реализации базы данных и запросов данных из нее. А для планирования фоновой работы мы используем WorkManager. И это лишь часть нововведений. В этой книге компоненты Jetpack в той или иной мере вплетены во все проекты.
Чтобы сфокусироваться на том, как разрабатываются современные приложения для Android, в этой книге используются библиотеки сторонних разработчиков, а не только API в пределах данного фреймворка или Jetpack. Один из примеров — отказ от HttpURLConnection и других сетевых API нижнего уровня в пользу использования Retrofit и его зависимых библиотек. Мы тем самым сильно отходим от наших предыдущих книг, но считаем, что такой подход подготовит вас к погружению в профессиональную разработку приложений после прочтения нашей книги. Выбранные библиотеки мы используем в повседневной жизни, разрабатывая приложения на Android для наших клиентов.
Как работать с книгой
Эта книга не справочник. Мы старались помочь в преодолении начального барьера, чтобы вы могли извлечь максимум пользы из существующих справочников и пособий. Книга основана на материалах пятидневного учебного курса в Big Nerd Ranch. Соответственно предполагается, что вы будете читать ее с самого начала. Каждая глава базируется на предшествующем материале, и пропускать главы не рекомендуется.
На наших занятиях студенты прорабатывают эти материалы, но в обучении также важно и другое — ваш настрой и обстановка.
Желательно, чтобы ваша учебная среда была похожа на нашу. В частности, стоит хорошенько высыпаться и найти спокойное место для работы. Следующие факторы тоже сыграют положительную роль:
— Создайте учебную группу с друзьями или коллегами.
— Выделяйте время, когда вы будете заниматься исключительно чтением книги.
— Примите участие в работе форума книги на сайте forums.bignerdranch.com.
— Найдите специалиста по Android, который поможет вам в трудный момент.
Структура книги
В этой книге мы напишем семь приложений для Android. Два приложения очень просты, и на их создание уходит всего одна глава. Другие приложения часто оказываются более сложными, а самое длинное приложение занимает 11 глав. Все приложения спроектированы так, чтобы продемонстрировать важные концепции и приемы и дать опыт их практического применения.
GeoQuiz
В первом приложении мы исследуем основные принципы создания проектов Android, activity, макеты и явные интенты. Вы также научитесь без проблем работать с конфигурацией.
CriminalIntent
Самое большое приложение в книге предназначено для хранения информации о проступках ваших коллег по офису. Вы научитесь использовать фрагменты, интерфейсы «главное-детализированное представление», списковые интерфейсы, меню, камеру, неявные интенты и многое другое.
BeatBox
Наведите ужас на своих врагов и узнайте больше о фрагментах, воспроизведении мультимедийного контента, архитектуре MVVM, связывании данных, тестировании, темах и графических объектах.
NerdLauncher
Нестандартный лаунчер раскроет тонкости работы системы интентов, процессов и задач.
PhotoGallery
Клиент Flickr для загрузки и отображения фотографий из общедоступной базы Flickr. Приложение демонстрирует работу со службами, многопоточное программирование, обращения к веб-службам и т. д.
DragAndDraw
В этом простом графическом приложении рассматривается обработка событий касания и создание нестандартных представлений.
Sunset
В этом крохотном приложении вы создадите красивое представление заката над водой, а заодно освоите тонкости анимации.
Версии Android
Мы будем говорить о версиях Android, широко используемых на момент написания книги. Для данного издания это версии Android 5.0 (Lollipop, API уровня 21) — Android 9.0 (Pie, API уровня 28). Несмотря на то что более старые версии все еще используются, нам кажется, что усилия, требуемые для поддержки этих версий, того не стоят.
Если вы хотите получить информацию о поддержке версий Android ранее 5.0, вы можете почитать предыдущие издания этой книги. Третье издание было нацелено на Android 4.4 и выше, второе — на Android 4.1 и выше, а первое — на Android 2.3 и выше.
Даже после выхода новых версий Android приемы, изложенные в книге, будут работать благодаря политике обратной совместимости Android (подробности см. в главе 7). На сайте forums.bignerdranch.com будет публиковаться информация об изменениях, а также комментарии по поводу использования материала книги с последними версиями.
Подробнее об интентах и задачах
В этой главе мы используем неявные интенты для создания приложения-лаунчера, заменяющего стандартный лаунчер Android. На рис. 23.1 показано, как будет выглядеть приложение NerdLauncher.
NerdLauncher выводит список приложений на устройстве. Пользователь нажимает элемент списка, чтобы запустить соответствующее приложение.
Чтобы приложение работало правильно, нам придется углубить свое понимание интентов, фильтров интентов и схем взаимодействий между приложениями в среде Android.
Создание приложения NerdLauncher
В Android Studio выберите команду File ⇒ New Project, чтобы создать новый проект. Выберите пункт Add No Activity на вкладке Phone and Tablet. Присвойте приложению название NerdLauncher и назначьте имя пакета com.bignerdranch.android.nerdlauncher. Установите флажок Use AndroidX artifacts, а остальные настройки не изменяйте.
После инициализации проекта в Android Studio создайте новую пустую activity, выбрав команду File ⇒ New ⇒ Activity ⇒ Empty Activity. Присвойте activity имя NerdLauncherActivity и установите флажок Launcher Activity.
NerdLauncherActivity отображает список названий приложений в RecyclerView. Добавьте зависимость androidx.recyclingerview:recyclingerview:1.0.0 в файл app/build.gradle, как вы делали это в главе 9. Если вы хотите использовать более новые версии RecyclerView, их можно найти по ссылке developer.android.com/jetpack/androidx/releases/reecycleerview.
Измените содержимое файла res/layout/activity_nerd_launcher.xml в части кода RecyclerView, как показано в листинге 23.1.
Листинг 23.1. Обновление макета NerdLauncherActivity (layout/activity_nerd_launcher.xml)
<?xml version="1.0" encoding="utf-8"?>
<androidx.recyclerview.widget.RecyclerView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/app_recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
Откройте файл NerdLauncherActivity.kt и спрячьте ссылку на объект RecyclerView в свойстве (уже скоро мы подключим данные к RecyclerView).
Листинг 23.2. Базовая реализация NerdLauncherActivity (NerdLauncherActivity.kt)
class NerdLauncherActivity : AppCompatActivity() {
private lateinit var recyclerView: RecyclerView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_nerd_launcher)
recyclerView = findViewById(R.id.app_recycler_view)
recyclerView.layoutManager = LinearLayoutManager(this)
}
}
Запустите приложение и убедитесь в том, что пока все компоненты взаимодействуют правильно. Если все сделано без ошибок, вы становитесь владельцем приложения NerdLauncher, в котором отображается пустой виджет RecyclerView (рис. 23.2).
Обработка неявного интента
NerdLauncher отображает список запускаемых (launchable) приложений на устройстве. («Запускаемым» называется приложение, которое может быть запущено пользователем, если он щелкнет на значке на «Главном экране» или на экране лаунчера.) Для этого NerdLauncher запрашивает у системы список запускаемых главных activity.
Package Manager, о котором мы говорили в главе 15, используется для разрешения activity. У запускаемых главных activity фильтры интентов включают действие MAIN и категорию LAUNCHER. Вы уже видели в своих проектах фильтр интентов в файле manifests/AndroidManifest.xml:
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
Когда NerdLauncherActivity стал запускающей activity, фильтры интентов добавляются автоматически. (Проверьте манифест, если хотите.)
В файле NerdLauncherActivity.kt добавьте функцию setupAdapter() и вызовите его из onCreateView(…). (Позднее эта функция создаст экземпляр RecyclerView.Adapter и назначит его объекту RecyclerView, но пока она просто генерирует список данных приложения.)
Также создайте неявный интент и получите список activity, соответствующих интенту, от PackageManager. Пока мы ограничимся простой регистрацией количества activity, возвращенных PackageManager.
Листинг 23.3. Получение информации у PackageManager (NerdLauncherActivity.kt)
private const val TAG = "NerdLauncherActivity"
class NerdLauncherActivity : AppCompatActivity() {
private lateinit var recyclerView: RecyclerView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_nerd_launcher)
recyclerView = findViewById(R.id.app_recycler_view)
recyclerView.layoutManager = LinearLayoutManager(this)
setupAdapter()
}
private fun setupAdapter() {
val startupIntent = Intent(Intent.ACTION_MAIN).apply {
addCategory(Intent.CATEGORY_LAUNCHER)
}
val activities = packageManager.queryIntentActivities(startupIntent, 0)
Log.i(TAG, "Found ${activities.size} activities")
}
}
Здесь мы создаем неявный интент с заданным действием ACTION_MAIN. Переменная CATEGORY_LAUNCHER добавлена в категории интента.
Вызов PackageManager.requestIntentActivities(Intent, Int) возвращает список, содержащий ResolveInfo для всех activity, у которых есть фильтр, соответствующий данному интенту. Вы можете указать флаги для изменения результатов. Например, флаг PackageManager.GET_SHARED_LIBRARY_FILES заставляет запрос включать в результаты дополнительные данные (пути к библиотекам, которые связаны с каждым приложением, удовлетворяющим требованиям). Здесь вы передаете 0, что указывает на то, что вы не хотите изменять результаты.
Запустите приложение NerdLauncher и посмотрите в выводе LogCat, сколько приложений вернул экземпляр PackageManager (у нас при первом пробном запуске их было 30).
В CriminalIntent для отправки отчетов использовался неявный интент. Чтобы представить на экране список выбора приложений, мы создали неявный интент, упаковали его в интент выбора и отправили ОС вызовом startActivity(Intent):
val intent = Intent(Intent.ACTION_SEND)
... // Создание и размещение дополнений интентов
chooserIntent = Intent.createChooser(intent, getString(R.string.send_report)
startActivity(chooserIntent)
Почему мы не используем этот подход здесь? Вкратце: дело в том, что фильтр интентов MAIN/LAUNCHER может соответствовать или не соответствовать неявному интенту MAIN/LAUNCHER, отправленному через startActivity(Intent).
Оказывается, вызов startActivity(Intent) не означает «Запустить activity, соответствующую этому неявному интенту». Он означает «Запустить activity по умолчанию, соответствующую этому неявному интенту». Когда вы отправляете неявный интент с использованием startActivityForResult(Intent) (или startActivity(…)), ОС незаметно включает в интент категорию Intent.CATEGORY_DEFAULT.
Таким образом, если вы хотите, чтобы фильтр интентов соответствовал неявным интентам, отправленным через startActivity(Intent), вы должны включить в этот фильтр интентов категорию DEFAULT.
Activity с фильтром интентов MAIN/LAUNCHER является главной точкой входа приложения, которому она принадлежит. Для нее важно лишь то, что она является главной точкой входа приложения, а является ли она главной точкой входа «по умолчанию» — несущественно, поэтому она не обязана включать категорию CATEGORY_DEFAULT.
Так как фильтры интентов MAIN/LAUNCHER могут не включать CATEGORY_DEFAULT, надежность их соответствия неявным интентам, отправленным вызовом startActivity(Intent), не гарантирована. Поэтому мы используем интент для прямого запроса у PackageManager информации об activity с фильтром интентов MAIN/LAUNCHER.
Следующий шаг — отображение меток этих activity в списке RecyclerView экземпляра NerdLauncherFragment. Метка (label) activity представляет собой отображаемое имя — нечто, понятное пользователю. Если учесть, что эти activity относятся к лаунчеру, такой меткой, скорее всего, должно быть имя приложения.
Метки activity вместе с другими метаданными содержатся в объектах ResolveInfo, возвращаемых PackageManager.
Сначала отсортируйте объекты ResolveInfo, возвращаемые PackageManager, в алфавитном порядке меток, получаемых функцией ResolveInfo.loadLabel
(PackageManager).
Листинг 23.4. Алфавитная сортировка (NerdLauncherActivity.kt)
class NerdLauncherActivity : AppCompatActivity() {
...
private fun setupAdapter() {
val startupIntent = Intent(Intent.ACTION_MAIN).apply {
addCategory(Intent.CATEGORY_LAUNCHER)
}
val activities = packageManager.queryIntentActivities(startupIntent, 0)
activities.sortWith(Comparator { a, b ->
String.CASE_INSENSITIVE_ORDER.compare(
a.loadLabel(packageManager).toString(),
b.loadLabel(packageManager).toString()
)
})
Log.i(TAG, "Found ${activities.size} activities")
}
}
Теперь определите класс ViewHolder для отображения метки activity. Сохраните объект ResolveInfo activity в переменной класса (позднее мы еще не раз используем его).
Листинг 23.5. Реализация ViewHolder (NerdLauncherActivity.kt)
class NerdLauncherActivity : AppCompatActivity() {
...
private fun setupAdapter() {
...
}
private class ActivityHolder(itemView: View) :
RecyclerView.ViewHolder(itemView) {
private val nameTextView = itemView as TextView
private lateinit var resolveInfo: ResolveInfo
fun bindActivity(resolveInfo: ResolveInfo) {
this.resolveInfo = resolveInfo
val packageManager = itemView.context.packageManager
val appName = resolveInfo.loadLabel(packageManager).toString()
nameTextView.text = appName
}
}
}
Затем добавьте реализацию RecyclerView.Adapter.
Листинг 23.6. Реализация RecyclerView.Adapter (NerdLauncherActivity.kt)
class NerdLauncherActivity : AppCompatActivity() {
...
private class ActivityHolder(itemView: View) :
RecyclerView.ViewHolder(itemView) {
...
}
private class ActivityAdapter(val activities: List<ResolveInfo>) :
RecyclerView.Adapter<ActivityHolder>() {
override fun onCreateViewHolder(container: ViewGroup, viewType: Int):
ActivityHolder {
val layoutInflater = LayoutInflater.from(container.context)
val view = layoutInflater
.inflate(android.R.layout.simple_list_item_1, container, false)
return ActivityHolder(view)
}
override fun onBindViewHolder(holder: ActivityHolder, position: Int) {
val resolveInfo = activities[position]
holder.bindActivity(resolveInfo)
}
override fun getItemCount(): Int {
return activities.size
}
}
}
Здесь мы заполняем файл android.R.layout.simple_list_item_1 в функции onCreateViewHolder(…). Файл simple_list_item_1 layout является частью фреймворка Android, поэтому вы ссылаетесь на него как на layout android.R.layout, а не как на R.layout. В нем содержится один TextView.
Наконец, измените код функции setupAdapter(), чтобы она создавала экземпляр ActivityAdapter и назначала его адаптером RecyclerView.
Листинг 23.7. Назначение адаптера RecyclerView (NerdLauncherActivity.kt)
class NerdLauncherActivity : AppCompatActivity() {
...
private fun setupAdapter() {
...
Log.i(TAG, "Found ${activities.size} activities")
recyclerView.adapter = ActivityAdapter(activities)
}
...
}
Запустите NerdLauncher; вы увидите список RecyclerView, заполненный метками activity (рис. 23.3).
Создание явных интентов на стадии выполнения
Мы использовали неявный интент для сбора информации об activity и выводе ее в формате списка. Следующим шагом должен стать запуск выбранной activity при нажатии пользователем на элементе списка. Для запуска activity будет использоваться явный интент.
Для создания явного интента необходимо извлечь из ResolveInfo имя пакета и имя класса activity. Эти данные можно получить из части ResolveInfo с именем ActivityInfo. (О том, какие данные доступны в разных частях ResolveInfo, можно узнать из документации: developer.android.com/reference/kotlin/android/content/pm/ResolveInfo.html.)
Реализуйте в ActivityHolder слушателя нажатий. При нажатии на activity в списке по данным ActivityInfo этой activity создайте явный интент. Затем используйте этот явный интент для запуска выбранной activity.
Листинг 23.8. Запуск выбранной activity (NerdLauncherActivity.kt)
class NerdLauncherActivity : AppCompatActivity() {
...
private class ActivityHolder(itemView: View) :
RecyclerView.ViewHolder(itemView),
View.OnClickListener {
private val nameTextView = itemView as TextView
private lateinit var resolveInfo: ResolveInfo
init {
nameTextView.setOnClickListener(this)
}
fun bindActivity(resolveInfo: ResolveInfo) {
...
}
override fun onClick(view: View) {
val activityInfo = resolveInfo.activityInfo
val intent = Intent(Intent.ACTION_MAIN).apply {
setClassName(activityInfo.applicationInfo.packageName,
activityInfo.name)
}
val context = view.context
context.startActivity(intent)
}
}
...
}
Обратите внимание: в этом интенте мы отправляем действие как часть явного интента. Большинство приложений ведет себя одинаково независимо от того, включено действие или нет, однако некоторые приложения могут изменять свое поведение. Одна и та же activity может отображать разные интерфейсы в зависимости от того, как она была запущена. Вам как программисту лучше всего четко объявить свои намерения и позволить activity запуститься так, как они считают нужным.
В листинге 23.8 мы получаем имя пакета и имя класса из метаданных и используем их для создания явной activity функцией Intent:
fun setClassName(packageName: String, className: String): Intent
Этот способ отличается от того, который использовался нами для создания явных интентов в прошлом. Ранее мы использовали конструктор Intent, получающий объекты Context и Class:
Intent(packageContext: Context, cls: Class<?>)
Этот конструктор использует свои параметры для получения того, в чем Intent реально нуждается — ComponentName, имени пакета, объединенного с именем класса. Когда вы передаете Activity и Class для создания Intent, конструктор определяет полное имя пакета по Activity.
fun setComponent(component: ComponentName): Intent
Однако решение с функцией setClassName(…), автоматически создающей имя компонента, получается более компактным.
Запустите NerdLauncher и посмотрите, как работает запуск приложений.
» Более подробно с книгой можно ознакомиться на сайте издательства
» Оглавление
» Отрывок
Для Хаброжителей скидка 25% по купону — Android
По факту оплаты бумажной версии книги на e-mail высылается электронная книга.
Книга «Android. Программирование для профессионалов. 4-е издание»
Эта книга посвящена прикладным методам разработки приложений на Kotlin, и подойдет для всех версий Android от 5.0 (Lollipop) до 8.1 (Oreo) и выше. Используйте Android Studio для создания приложений, чтобы проверять код на каждом этапе, интегрировать его с другими приложениями, работать с изображениями, воспроизводить аудио и делать многое другое. Каждая глава продумана (и протестирована) так, чтобы вы смогли получить максимум опыта и знания, необходимые для разработки под Android.
Что нового в четвертом издании?
В этом издании мы провели капитальный ремонт и изменили буквально каждую главу. Самое большое изменение заключается в том, что программы теперь написаны на Kotlin, а не на Java. Поэтому неофициальным рабочим названием этого издания было «Android 4K».
Еще одно радикальное изменение — включение библиотек компонентов Android Jetpack. Теперь мы используем Jetpack-библиотеки (их еще называют AndroidX) вместо Support Library. Кроме того, мы включили новые API Jetpack, где это было уместно. Например, мы используем ViewModel для сохранения состояния пользовательского интерфейса при вращении. Мы используем Room и LiveData для реализации базы данных и запросов данных из нее. А для планирования фоновой работы мы используем WorkManager. И это лишь часть нововведений. В этой книге компоненты Jetpack в той или иной мере вплетены во все проекты.
Чтобы сфокусироваться на том, как разрабатываются современные приложения для Android, в этой книге используются библиотеки сторонних разработчиков, а не только API в пределах данного фреймворка или Jetpack. Один из примеров — отказ от HttpURLConnection и других сетевых API нижнего уровня в пользу использования Retrofit и его зависимых библиотек. Мы тем самым сильно отходим от наших предыдущих книг, но считаем, что такой подход подготовит вас к погружению в профессиональную разработку приложений после прочтения нашей книги. Выбранные библиотеки мы используем в повседневной жизни, разрабатывая приложения на Android для наших клиентов.
Версии Android
Мы будем говорить о версиях Android, широко используемых на момент написания книги. Для данного издания это версии Android 5.0 (Lollipop, API уровня 21) — Android 9.0 (Pie, API уровня 28). Несмотря на то что более старые версии все еще используются, нам кажется, что усилия, требуемые для поддержки этих версий, того не стоят.
Если вы хотите получить информацию о поддержке версий Android ранее 5.0, вы можете почитать предыдущие издания этой книги. Третье издание было нацелено на Android 4.4 и выше, второе — на Android 4.1 и выше, а первое — на Android 2.3 и выше.
Даже после выхода новых версий Android приемы, изложенные в книге, будут работать благодаря политике обратной совместимости Android (подробности см. в главе 7). На сайте forums.bignerdranch.com будет публиковаться информация об изменениях, а также комментарии по поводу использования материала книги с последними версиями.
Подробнее об интентах и задачах
Содержание статьи:
В этой главе мы используем неявные интенты для создания приложения-лаунчера, заменяющего стандартный лаунчер Android. На рис. 23.1 показано, как будет выглядеть приложение NerdLauncher.
NerdLauncher выводит список приложений на устройстве. Пользователь нажимает элемент списка, чтобы запустить соответствующее приложение.
Чтобы приложение работало правильно, нам придется углубить свое понимание интентов, фильтров интентов и схем взаимодействий между приложениями в среде Android.
Создание приложения NerdLauncher
В Android Studio выберите команду File ⇒ New Project, чтобы создать новый проект. Выберите пункт Add No Activity на вкладке Phone and Tablet. Присвойте приложению название NerdLauncher и назначьте имя пакета com.bignerdranch.android.nerdlauncher. Установите флажок Use AndroidX artifacts, а остальные настройки не изменяйте.
После инициализации проекта в Android Studio создайте новую пустую activity, выбрав команду File ⇒ New ⇒ Activity ⇒ Empty Activity. Присвойте activity имя NerdLauncherActivity и установите флажок Launcher Activity.
NerdLauncherActivity отображает список названий приложений в RecyclerView. Добавьте зависимость androidx.recyclingerview:recyclingerview:1.0.0 в файл app/build.gradle, как вы делали это в главе 9. Если вы хотите использовать более новые версии RecyclerView, их можно найти по ссылке developer.android.com/jetpack/androidx/releases/reecycleerview.
Измените содержимое файла res/layout/activity_nerd_launcher.xml в части кода RecyclerView, как показано в листинге 23.1.
Листинг 23.1. Обновление макета NerdLauncherActivity (layout/activity_nerd_launcher.xml)
Откройте файл NerdLauncherActivity.kt и спрячьте ссылку на объект RecyclerView в свойстве (уже скоро мы подключим данные к RecyclerView).
Листинг 23.2. Базовая реализация NerdLauncherActivity (NerdLauncherActivity.kt)
Запустите приложение и убедитесь в том, что пока все компоненты взаимодействуют правильно. Если все сделано без ошибок, вы становитесь владельцем приложения NerdLauncher, в котором отображается пустой виджет RecyclerView (рис. 23.2).
Обработка неявного интента
NerdLauncher отображает список запускаемых (launchable) приложений на устройстве. («Запускаемым» называется приложение, которое может быть запущено пользователем, если он щелкнет на значке на «Главном экране» или на экране лаунчера.) Для этого NerdLauncher запрашивает у системы список запускаемых главных activity.
Package Manager, о котором мы говорили в главе 15, используется для разрешения activity. У запускаемых главных activity фильтры интентов включают действие MAIN и категорию LAUNCHER. Вы уже видели в своих проектах фильтр интентов в файле manifests/AndroidManifest.xml:
Когда NerdLauncherActivity стал запускающей activity, фильтры интентов добавляются автоматически. (Проверьте манифест, если хотите.)
В файле NerdLauncherActivity.kt добавьте функцию setupAdapter() и вызовите его из onCreateView(…). (Позднее эта функция создаст экземпляр RecyclerView.Adapter и назначит его объекту RecyclerView, но пока она просто генерирует список данных приложения.)
Также создайте неявный интент и получите список activity, соответствующих интенту, от PackageManager. Пока мы ограничимся простой регистрацией количества activity, возвращенных PackageManager.
Листинг 23.3. Получение информации у PackageManager (NerdLauncherActivity.kt)
Здесь мы создаем неявный интент с заданным действием ACTION_MAIN. Переменная CATEGORY_LAUNCHER добавлена в категории интента.
Вызов PackageManager.requestIntentActivities(Intent, Int) возвращает список, содержащий ResolveInfo для всех activity, у которых есть фильтр, соответствующий данному интенту. Вы можете указать флаги для изменения результатов. Например, флаг PackageManager.GET_SHARED_LIBRARY_FILES заставляет запрос включать в результаты дополнительные данные (пути к библиотекам, которые связаны с каждым приложением, удовлетворяющим требованиям). Здесь вы передаете 0, что указывает на то, что вы не хотите изменять результаты.
Запустите приложение NerdLauncher и посмотрите в выводе LogCat, сколько приложений вернул экземпляр PackageManager (у нас при первом пробном запуске их было 30).
В CriminalIntent для отправки отчетов использовался неявный интент. Чтобы представить на экране список выбора приложений, мы создали неявный интент, упаковали его в интент выбора и отправили ОС вызовом startActivity(Intent):
Почему мы не используем этот подход здесь? Вкратце: дело в том, что фильтр интентов MAIN/LAUNCHER может соответствовать или не соответствовать неявному интенту MAIN/LAUNCHER, отправленному через startActivity(Intent).
Оказывается, вызов startActivity(Intent) не означает «Запустить activity, соответствующую этому неявному интенту». Он означает «Запустить activity по умолчанию, соответствующую этому неявному интенту». Когда вы отправляете неявный интент с использованием startActivityForResult(Intent) (или startActivity(…)), ОС незаметно включает в интент категорию Intent.CATEGORY_DEFAULT.
Таким образом, если вы хотите, чтобы фильтр интентов соответствовал неявным интентам, отправленным через startActivity(Intent), вы должны включить в этот фильтр интентов категорию DEFAULT.
Activity с фильтром интентов MAIN/LAUNCHER является главной точкой входа приложения, которому она принадлежит. Для нее важно лишь то, что она является главной точкой входа приложения, а является ли она главной точкой входа «по умолчанию» — несущественно, поэтому она не обязана включать категорию CATEGORY_DEFAULT.
Так как фильтры интентов MAIN/LAUNCHER могут не включать CATEGORY_DEFAULT, надежность их соответствия неявным интентам, отправленным вызовом startActivity(Intent), не гарантирована. Поэтому мы используем интент для прямого запроса у PackageManager информации об activity с фильтром интентов MAIN/LAUNCHER.
Следующий шаг — отображение меток этих activity в списке RecyclerView экземпляра NerdLauncherFragment. Метка (label) activity представляет собой отображаемое имя — нечто, понятное пользователю. Если учесть, что эти activity относятся к лаунчеру, такой меткой, скорее всего, должно быть имя приложения.
Метки activity вместе с другими метаданными содержатся в объектах ResolveInfo, возвращаемых PackageManager.
Сначала отсортируйте объекты ResolveInfo, возвращаемые PackageManager, в алфавитном порядке меток, получаемых функцией ResolveInfo.loadLabel
(PackageManager).
Листинг 23.4. Алфавитная сортировка (NerdLauncherActivity.kt)
Теперь определите класс ViewHolder для отображения метки activity. Сохраните объект ResolveInfo activity в переменной класса (позднее мы еще не раз используем его).
Листинг 23.5. Реализация ViewHolder (NerdLauncherActivity.kt)
Затем добавьте реализацию RecyclerView.Adapter.
Листинг 23.6. Реализация RecyclerView.Adapter (NerdLauncherActivity.kt)
Здесь мы заполняем файл android.R.layout.simple_list_item_1 в функции onCreateViewHolder(…). Файл simple_list_item_1 layout является частью фреймворка Android, поэтому вы ссылаетесь на него как на layout android.R.layout, а не как на R.layout. В нем содержится один TextView.
Наконец, измените код функции setupAdapter(), чтобы она создавала экземпляр ActivityAdapter и назначала его адаптером RecyclerView.
Листинг 23.7. Назначение адаптера RecyclerView (NerdLauncherActivity.kt)
Запустите NerdLauncher; вы увидите список RecyclerView, заполненный метками activity (рис. 23.3).
С полным содержанием статьи можно ознакомиться на сайте «Хабрахабр»: https://habr.com/ru/company/piter/blog/526280/
Источник
Технические книги, инструкции, руководства – ROZETKA
Инструкции: предназначение и виды
На современном рынке нашей страны представлено широкое разнообразие технических направлений. Разобраться в особенностях функционирования некоторых из них без квалифицированной подготовки просто нереально. В таких ситуациях на помощь приходит специализированная техническая литература, составители которой рассказывают о правилах работы выбранного направления. Такие пособия и стали основными видами инструкций, которые используют современные пользователи.
Инструкции производятся в виде полноценных книг технического направления. Дипломированные специалисты, которые достигли определенных успехов в выбранной сфере деятельности готовы рассказать о ее аспектах. В целом же, есть структуризация данных материалов которая основана на их индивидуальных особенностях и предназначениях. Классификация такой литературы представлена следующим образом:
- Энергетика и электротехника. Это учебная литература, которая позволяет сориентироваться в этой деятельности. В ней рассказаны базовые понятие энергетической и электротехнической сферы, описаны научные понятия, относящиеся к данной категории. Составляются они квалифицированными специалистами. Используются для обучения в профильных образовательных учреждениях.
- Компьютерные технологии. Эти руководства – одни из самых востребованных инструкций среди потребителей. В них описываются базовые принципы работы с персональным компьютером. Читатель сможет узнать множество интересных фактов о нововведенных технологиях, просмотреть прогнозы их дальнейшего развития.
- Операционные системы и пользовательские программы. Также получили широкое распространение на отечественном рынке. Представляют собой рекомендации по применению определенных программ для ПК, а также предоставляют базовые и углубленные навыки в работе с операционными системами.
- Радиоэлектроника, радиотехника, связь. Научные пособия, которые помогают новичкам подробнее вникнуть в соответствующую сферу. Описывает технические, теоретические и практические стороны данного направления.
- Программирование и базы данных. Вводит читателя в базовый курс программирования. Такие книги и пособия рассказывают о ключевых аспектах рассматриваемого вопроса. Описывается общее предназначение основных языков программирования. Такие материалы станут полезными для начинающих программистов.
- Промышленность, строительство, транспорт. Такие руководства содержат в себе подробную информацию по охране труда на производственных предприятиях. Также в них можно отыскать информацию, которая предоставляет руководство и советы по ремонту транспортных средств. Авторами данных учебников, являются опытные мастера, которые ориентируются в этом вопросе. Из этих руководств можно почерпнуть множество полезных данных по эксплуатации всевозможного строительного оборудования. Такие инструкции оптимально подойдут для начинающих и даже опытных специалистов, разнообразных сфер деятельности.
Как выбрать качественную техническую литературу
Выбор технической литературы – это сложная задача. Перед покупкой, прежде всего, стоит обратить внимание на автора. Для того, чтобы понять его осознанность касательно выбранного вопроса, можно изучить информацию о степени его познаний в данной сфере при помощи Интернета.
Также нужно определиться с конкретной интересующей темой и выбрать нужное руководство. Для этого стоит обратить внимание на аннотацию. Здесь размещается краткое содержание, касающееся общей темы и некоторых нюансов.
Если вопрос касается компьютерных технологий, программирования и схожих тематик, стоит обращать внимание на дату их выхода (публикацию). Данные тематики подразумевают полноценный анализ основных компьютерных вопросов. Поэтому литература, выпущенная всего несколько лет назад, уже может быть устаревшей. Рассмотренные вопросы могут быть актуальными для прошлых лет, но не для современности. Оптимальный вариант – руководства, выпущенные в течении трех прошедших лет. В них содержатся острые вопросы, которые интересуют современных научных исследователей и программистов.
Android. Программирование для профессионалов. 3-е издание, Филлипс Б.
Описание
Android. Программирование для профессионалов. 3-е издание, Филлипс Б. купить Украина книга
Издательство — Питер
Язык — русский
Обложка — Мягкая обложка
Год издания — 2019
Количество страниц — 688
ISBN — 978-5-4461-0413-0
Бумага — белая, офсетная
О книге Android. Программирование для профессионалов. 3-е издание, Филлипс Б.
Когда вы приступаете к разработке приложений для Android — вы как будто оказываетесь в чужой стране: даже зная местный язык, на первых порах всё равно чувствуете себя некомфортно. Такое впечатление, что все окружающие знают что-то такое, чего вы никак не понимаете. И даже то, что вам уже известно, в новом контексте оказывается попросту неправильным.Третье издание познакомит вас с интегрированной средой Android Studio, которая сильно облегчает разработку приложений. Вы не только изучите основы программирования, но и узнаете о возможностях самых распространенных версий Android; новых инструментах, таких как макеты с ограничениями и связывание данных; модульном тестировании; средствах доступности; архитектурном стиле MVVM; локализации; новой системе разрешений времени выполнения. Все учебные приложения были спроектированы таким образом, чтобы продемонстрировать важные концепции и приемы программирования под Android и дать опыт их практического применения.
Android. Программирование для профессионалов. 3-е издание, Филлипс Б. оглавление
Благодарности
Изучение Android
Предварительные условия
Что нового в третьем издании?
Как работать с книгой
Структура книги
Упражнения
А вы любознательны?
Стиль программирования
Типографские соглашения
Версии Android
Необходимые инструменты
Загрузка и установка Android Studio
Загрузка старых версий SDK
Физическое устройство
От издательства
Глава 1. Первое приложение Android
Основы построения приложения
Создание проекта Android
Навигация в Android Studio
Построение макета пользовательского интерфейса
Иерархия представлений
Атрибуты виджетов
Создание строковых ресурсов
Предварительный просмотр макета
От разметки XML к объектам View
Ресурсы и идентификаторы ресурсов
Подключение виджетов к программе
Получение ссылок на виджеты
Назначение слушателей
Уведомления
Автозавершение
Выполнение в эмуляторе
Для любознательных: процесс построения приложений Android
Средства построения программ Android
Упражнения
Упражнение: настройка уведомления
8
Глава 2. Android и модель MVC
Создание нового класса
Генерирование get- и set-методов
Архитектура «Модель-Представление-Контроллер» и Android
Преимущества MVC
Обновление уровня представления
Обновление уровня контроллера
Запуск на устройстве
Подключение устройства
Настройка устройства для разработки
Добавление значка
Добавление ресурсов в проект
Ссылки на ресурсы в XML
Упражнение. Добавление слушателя для TextView
Упражнение. Добавление кнопки возврата
Упражнение. От Button к ImageButton
Глава 3. Жизненный цикл активности
Регистрация событий жизненного цикла Activity
Создание сообщений в журнале
Использование LogCat
Анализ жизненного цикла активности на примере
Повороты и жизненный цикл активности
Конфигурации устройств и альтернативные ресурсы
Сохранение данных между поворотами
Переопределение onSaveInstanceState(Bundle)
Снова о жизненном цикле Activity
Для любознательных: тестирование onSaveInstanceState(Bundle)
Для любознательных: методы и уровни регистрации
Упражнение. Предотвращение ввода нескольких ответов
Упражнение. Вывод оценки
Глава 4. Отладка приложений Android
Исключения и трассировка стека
Диагностика ошибок поведения
Сохранение трассировки стека
Установка точек прерывания
Прерывания по исключениям
Особенности отладки Android
Android Lint
Проблемы с классом R
Упражнение. Layout Inspector
Упражнение. Allocation Tracker
Глава 5. Вторая активность
Подготовка к включению второй активности
Создание второй активности
9Создание нового субкласса активности
Объявление активностей в манифесте
Добавление кнопки Cheat в QuizActivity
Запуск активности
Передача информации через интенты
Передача данных между активностями
Дополнения интентов
Получение результата от дочерней активности
Ваши активности с точки зрения Android
Упражнение. Лазейка для мошенников
Глава 6. Версии Android SDK и совместимость
Версии Android SDK
Совместимость и программирование Android
Разумный минимум
Минимальная версия SDK
Целевая версия SDK
Версия SDK для компиляции
Безопасное добавление кода для более поздних версий API
Документация разработчика Android
Упражнение. Вывод версии построения
Упражнение. Ограничение подсказок
Глава 7. UI-фрагменты и FragmentManager
Гибкость пользовательского интерфейса
Знакомство с фрагментами
Начало работы над CriminalIntent
Создание нового проекта
Два типа фрагментов
Добавление зависимостей в Android Studio
Создание класса Crime
Хостинг UI-фрагментов
Жизненный цикл фрагмента
Два способа организации хостинга
Определение контейнерного представления
Создание UI-фрагмента
Определение макета CrimeFragment
Создание класса CrimeFragment
Реализация методов жизненного цикла фрагмента
Добавление UI-фрагмента в FragmentManager
Транзакции фрагментов
FragmentManager и жизненный цикл фрагмента
Архитектура приложений с фрагментами
Почему все наши активности используют фрагменты
Для любознательных: фрагменты и библиотека поддержки
Для любознательных: почему фрагменты из библиотеки поддержки лучше
10
Глава 8. Вывод списков и RecyclerView
Обновление уровня модели CriminalIntent
Синглеты и централизованное хранение данных
Абстрактная активность для хостинга фрагмента
Обобщенный макет для хостинга фрагмента
Абстрактный класс активности
Использование абстрактного класса
RecyclerView, Adapter и ViewHolder
ViewHolder и Adapter
Использование RecyclerView
Отображаемое представление
Реализация адаптера и ViewHolder
Связывание с элементами списка
Щелчки на элементах списка
Для любознательных: ListView и GridView
Для любознательных: синглеты
Упражнение. ViewType и RecyclerView
Глава 9. Создание пользовательских интерфейсов с использованием
макетов и виджетов
Использование графического конструктора
Знакомство с ConstraintLayout
Использование ConstraintLayout
Графический редактор
Освобождение пространства
Добавление виджетов
Внутренние механизмы ConstraintLayout
Редактирование свойств
Динамическое поведение элемента списка
Подробнее об атрибутах макетов
Плотности пикселов, dp и sp
Поля и отступы
Стили, темы и атрибуты тем
Рекомендации по проектированию интерфейсов Android
Графический конструктор макетов
Упражнение. Форматирование даты
Глава 10. Аргументы фрагментов
Запуск активности из фрагмента
Включение дополнения
Чтение дополнения
Обновление представления CrimeFragment данными Crime
Недостаток прямой выборки
Аргументы фрагментов
Присоединение аргументов к фрагменту
Получение аргументов
11Перезагрузка списка
Получение результатов с использованием фрагментов
Для любознательных: зачем использовать аргументы фрагментов?
Упражнение. Эффективная перезагрузка RecyclerView
Упражнение. Улучшение быстродействия CrimeLab
Глава 11. ViewPager
Создание CrimePagerActivity
ViewPager и PagerAdapter
Интеграция CrimePagerActivity
FragmentStatePagerAdapter и FragmentPagerAdapter
Для любознательных: как работает ViewPager
Для любознательных: формирование макетов представлений в коде
Упражнение. Восстановление полей CrimeFragment
Упражнение. Добавление кнопок для перехода в начало и конец списка
Глава 12. Диалоговые окна
Создание DialogFragment
Отображение DialogFragment
Назначение содержимого диалогового окна
Передача данных между фрагментами
Передача данных DatePickerFragment
Возвращение данных CrimeFragment
Назначение целевого фрагмента
Упражнение. Новые диалоговые окна
Упражнение. DialogFragment
Глава 13. Панель инструментов
AppCompat
Использование библиотеки AppCompat
Использование AppCompatActivity
Меню
Определение меню в XML
Создание меню
Реакция на выбор команд
Включение иерархической навигации
Как работает иерархическая навигация
Альтернативная команда меню
Переключение текста команды
«Да, и еще кое-что…»
Для любознательных: панели инструментов и панели действий
Упражнение. Удаление преступлений
Упражнение. Множественное число в строках
Упражнение. Пустое представление для списка
Глава 14. Базы данных SQLite
Определение схемы
Построение исходной базы данных
12
Работа с файлами в Android Device Monitor
Решение проблем при работе с базами данных
Изменение кода CrimeLab
Запись в базу данных
Использование ContentValues
Вставка и обновление записей
Чтение из базы данных
Использование CursorWrapper
Преобразование в объекты модели
Для любознательных: другие базы данных
Для любознательных: контекст приложения
Упражнение. Удаление преступлений
Глава 15. Неявные интенты
Добавление кнопок
Добавление подозреваемого в уровень модели
Форматные строки
Использование неявных интентов
Строение неявного интента
Отправка отчета
Запрос контакта у Android
Получение данных из списка контактов
Проверка реагирующих активностей
Упражнение. ShareCompat
Упражнение. Другой неявный интент
Глава 16. Интенты при работе с камерой
Место для хранения фотографий
Внешнее хранилище
Использование FileProvider
Выбор места для хранения фотографии
Использование интента камеры
Отправка интента
Масштабирование и отображение растровых изображений
Объявление функциональности
Упражнение. Вывод увеличенного изображения
Упражнение. Эффективная загрузка миниатюры
Глава 17. Двухпанельные интерфейсы
Гибкость макета
Модификация SingleFragmentActivity
Создание макета с двумя контейнерами фрагментов
Использование ресурса-псевдонима
Создание альтернативы для планшета
Активность: управление фрагментами
Интерфейсы обратного вызова фрагментов
Реализация CrimeListFragment.Callbacks
13Для любознательных: подробнее об определении размера экрана
Упражнение. Удаление смахиванием
Глава 18. Локализация
Локализация ресурсов
Ресурсы по умолчанию
Отличия в плотности пикселов
Проверка покрытия локализации в Translations Editor
Региональная локализация
Тестирование нестандартных локальных контекстов
Конфигурационные квалификаторы
Приоритеты альтернативных ресурсов
Множественные квалификаторы
Поиск наиболее подходящих ресурсов
Исключение несовместимых каталогов
Перебор по таблице приоритетов
Тестирование альтернативных ресурсов
Упражнение. Локализация дат
Глава 19. Доступность
TalkBack
Explore by Touch
Линейная навигация смахиванием
Чтение не-текстовых элементов
Добавление описаний контента
Включение фокусировки виджета
Создание сопоставимого опыта взаимодействия
Использование надписей для передачи контекста
Для любознательных: Accessibility Scanner
Упражнение. Улучшение списка
Упражнение. Предоставление контекста для ввода данных
Упражнение. Оповещения о событиях
Глава 20. Привязка данных и MVVM
Другие архитектуры: для чего?
Создание приложения BeatBox
Простая привязка данных
Импортирование активов
Получение информации об активах
Подключение активов для использования
Установление связи с данными
Создание ViewModel
Связывание с ViewModel
Отслеживаемые данные
Обращение к активам
Для любознательных: подробнее о привязке данных
Лямбда-выражения
14
Другие синтаксические удобства
BindingAdapter
Для любознательных: почему активы, а не ресурсы?
Для любознательных: «не-активы»?
Глава 21. Модульное тестирование и воспроизведение звуков
Создание объекта SoundPool
Загрузка звуков
Воспроизведение звуков
Зависимости при тестировании
Создание класса теста
Подготовка теста
Фиктивные зависимости
Написание тестов
Взаимодействия тестовых объектов
Обратные вызовы привязки данных
Выгрузка звуков
Повороты и преемственность объектов
Удержание фрагмента
Повороты и удержание фрагментов
Для любознательных: когда удерживать фрагменты
Для любознательных: Espresso и интеграционное тестирование
Для любознательных: фиктивные объекты и тестирование
Упражнение. Управление скоростью воспроизведения
Глава 22. Стили и темы
Цветовые ресурсы
Стили
Наследование стилей
Темы
Изменение темы
Добавление цветов в тему
Переопределение атрибутов темы
Исследование тем
Изменение атрибутов кнопки
Для любознательных: подробнее о наследовании стилей
Для любознательных: обращение к атрибутам тем
Глава 23. Графические объекты
Унификация кнопок
Геометрические фигуры
Списки состояний
Списки слоев
Для любознательных: для чего нужны графические объекты XML?
Для любознательных: Mipmap
Для любознательных: 9-зонные изображения
Упражнение. Темы кнопок
15Глава 24. Подробнее об интентах и задачах
Создание приложения NerdLauncher
Обработка неявного интента
Создание явных интентов на стадии выполнения
Задачи и стек возврата
Переключение между задачами
Запуск новой задачи
Использование NerdLauncher в качестве домашнего экрана
Упражнение. Значки
Для любознательных: процессы и задачи
Для любознательных: параллельные документы
Глава 25. HTTP и фоновые задачи
Создание приложения PhotoGallery
Основы сетевой поддержки
Разрешение на работу с сетью
Использование AsyncTask для выполнения в фоновом потоке
Главный программный поток
Кроме главного потока
Загрузка XML из Flickr
Разбор текста в формате JSON
От AsyncTask к главному потоку
Уничтожение AsyncTask
Для любознательных: подробнее об AsyncTask
Для любознательных: альтернативы для AsyncTask
Упражнение. Gson
Упражнение. Страничная навигация
Упражнение. Динамическая настройка количества столбцов
Глава 26. Looper, Handler и HandlerThread
Подготовка RecyclerView к выводу изображений
Множественные загрузки
Взаимодействие с главным потоком
Создание фонового потока
Сообщения и обработчики сообщений
Строение сообщения
Строение обработчика
Использование обработчиков
Передача Handler
Для любознательных: AsyncTask и потоки
Для любознательных: решение задачи загрузки изображений
Для любознательных: StrictMode
Упражнение. Предварительная загрузка и кэширование
Глава 27. Поиск
Поиск в Flickr
Использование SearchView
16
Реакция SearchView на взаимодействия с пользователем
Простое сохранение с использованием механизма общих настроек
Последний штрих
Упражнение. Еще одно усовершенствование
Глава 28. Фоновые службы
Создание IntentService
Зачем нужны службы
Безопасные сетевые операции в фоновом режиме
Поиск новых результатов
Отложенное выполнение и AlarmManager
Правильное использование сигналов
Неточное и точное повторение
Временная база
PendingIntent
Управление сигналами с использованием PendingIntent
Управление сигналом
Оповещения
Упражнение. Уведомления в Android Wear
Для любознательных: подробнее о службах
Что делают (и чего не делают) службы
Жизненный цикл службы
Незакрепляемые службы
Закрепляемые службы
Привязка к службам
Локальная привязка к службам
Для любознательных: JobScheduler и JobServices
JobScheduler и будущее фоновых операций
Упражнение. Использование JobService в Lollipop
Для любознательных: синхронизирующие адаптеры
Глава 29. Широковещательные интенты
Обычные и широковещательные интенты
Пробуждение при загрузке
Создание и регистрация автономного широковещательного приемника
Использование приемников
Фильтрация оповещений переднего плана
Отправка широковещательных интентов
Создание и регистрация динамического приемника
Ограничение широковещательной рассылки
Передача и получение данных с упорядоченной широковещательной рассылкой
Приемники и продолжительные задачи
Для любознательных: локальные события
Использование EventBus
Использование RxJava
Для любознательных: проверка видимости фрагмента
17Глава 30. Просмотр веб-страниц и WebView
И еще один блок данных Flickr
Простой способ: неявные интенты
Более сложный способ: WebView
Класс WebChromeClient
Повороты в WebView
Опасности при обработке изменений конфигурации
Для любознательных: внедрение объектов JavaScript
Для любознательных: переработка WebView в KitKat
Упражнение. Использование кнопки Back для работы с историей просмотра
Упражнение. Поддержка других ссылок
Глава 31. Пользовательские представления и события касания
Создание проекта DragAndDraw
Создание нестандартного представления
Создание класса BoxDrawingView
Обработка событий касания
Отслеживание перемещений между событиями
Рисование внутри onDraw(Canvas)
Упражнение. Сохранение состояния
Упражнение. Повороты
Глава 32. Анимация свойств
Построение сцены
Простая анимация свойств
Свойства преобразований
Выбор интерполятора
Изменение цвета
Одновременное воспроизведение анимаций
Для любознательных: другие API для анимации
Старые средства анимации
Переходы
Упражнения
Глава 33. Отслеживание местоположения устройства
Местоположение и библиотеки
Google Play Services
Создание Locatr
Play Services и тестирование в эмуляторах
Фиктивные позиционные данные
Построение интерфейса Locatr
Настройка Google Play Services
Разрешения
Использование Google Play Services
Геопоиск Flickr
Получение позиционных данных
18
Запрос разрешения во время выполнения
Проверка разрешений
Поиск и вывод изображений
Упражнение: обоснование разрешений
Упражнение. Индикатор прогресса
Глава 34. Карты
Импортирование Play Services Maps
Работа с картами в Android
Получение ключа Maps API
Создание карты
Получение расширенных позиционных данных
Работа с картой
Рисование на карте
Для любознательных: группы и ключи API
Глава 35. Материальный дизайн
Материальные поверхности
Возвышение и координата Z
Аниматоры списков состояний
Средства анимации
Круговое раскрытие
Переходы между общими элементами
Компоненты View
Карточки
Плавающие кнопки действий
Всплывающие уведомления
Подробнее о материальном дизайне
Послесловие
Последнее упражнение
Бессовестная самореклама
Спасибо
Также вы можете оставить вопрос или отзыв о книге: Android. Программирование для профессионалов. 3-е издание, Филлипс Б.
Про книгу «Android. Программирование для профессионалов»
Обычно я пишу обзоры книг, которые мне понравились. К книге, о которой пойдет речь в этом посте, у меня больше претензий, чем восторга, однако все-равно хочется о ней написать (и не только для того, чтобы поворчать).
Я уже давно поглядываю на программирование под Android, когда-то уже читал книги про это дело, но до реального применения все не добирался. И вот тут понадобилось написать для себя одно приложение под Android, поэтому параллельно с написанием кода решил освежить знания, почитав книжку. Надо сказать, что мне как-то не везет с литературой на эту тему, мне еще не попалось ни одной книги, которой бы я мог поставить твердую пятерку и написать восторженный отзыв. Везде описание идет какое-то обрывочное, которое не дает красивого описания архитектуры Android. Возможно, в этом виновата сама система.
К сожалению, книга Б. Харди, Б. Филлипса, К. Стюарта и К. Марсикано «Android. Программирование для профессионалов» не исключение. Но сначала хочется выразить свое «фи» переводчикам и издателю (несмотря на все мое уважение к издательству Питер). Во-первых, второе название книги перевели настолько вольно, что оно стало полностью противоречить содержанию книги. В оригинале книга называется «Android Programming. The Big Nerd Ranch Guide». Никаких профессионалов в оригинале нет, «The Big Nerd Ranch» — это компания, которая занимается разработкой и обучением программированию. И даже предисловие книги начинается словами «Начинающему программисту Android предстоит основательно потрудиться…» Таким образом, эта книга предназначена именно для новичков. Вот именно с этой позиции и стоит рассматривать эту книгу.
Во-вторых, что мне не понравилось в переводе книги. Ну почему наследование классов (subclassing) везде переведено как «субклассирование», а шаблон проектирования Singleton как «синглет»? Еще есть некоторые косяки у редактора в том, что где-то перепутаны рисунки, где-то неправильно названы имена файлов, используемых в листинге программы, но таких ошибок не так много.
Теперь, что касается содержания книги. У меня больше всего претензий к подаче материала. Для совсем начинающих она может быть даже неплохой книгой при условии, что читатель будет последовательно выполнять все упражнения, которые описаны в книге. На самом деле я очень не люблю, когда описание возможностей языка или платформы демонстрируется не на коротких примерах, которые можно легко удержать в голове, а на примере сравнительно больших программ, которые пишутся на протяжении нескольких глав, а именно так и построена данная книга. Из-за этого при переходе от одной главы к другой подробно описывается рефакторинг, которые нужно сделать, прежде чем удастся пощупать описываемую особенность Android. При этом в самом описании уже начинаешь путаться (если не писать программу, следуя за авторами), где код относится непосредственно к Android, а где к обвязке вокруг него, которую предлагается написать.
Кроме того, при использовании такого подхода в описании ощущаешь, что тебя ведут за руку по проторенной дорожке, но не дают обзора того, что еще можешь сделать с помощью описанных возможностей, и что для этого может понадобиться. Нет, в книге есть некоторые теоретические отступления, но их немного и они достаточно условно написаны (не хватает конкретики). А большую часть книги предлагается добавить такие-то строки в этот класс, такие-то строки в тот и посмотреть на результат. Наверное, такой подход оправдан для курсов по программированию, но в книге это читать ужасно нудно.
Какие же темы затронуты в книге? Разумеется, создание активностей и их жизненный цикл. Довольно неплохо написано про работу с фрагментами (они используются на протяжении всей книги), а также про взаимодействие активностей и фрагментов между собой.
Про стандартные виджеты сказано очень мало, используется их небольшое количество, и какие еще есть в поставке не сказано. Особенно обидно, что практически ничего не сказано про способы размещения виджетов в активности, рассказано только про те классы для размещения элементов, которые используются в примерах.
Неплохо написано про диалоговые окна, двухпанельный интерфейс и панели инструментов. Рассказано про работу с БД SQLite и работу с интентами (в том числе широковещательными). Что-то говорится о активах (assets) и использование класса SoundPool для проигрывания звуков. Отдельная глава посвящена стилям и темам. Кое-что сказано про рисование и анимации. Достаточно подробно разбираются примеры, где используется многопоточность и фоновые задачи. Про сервисы (фоновые службы) рассказывается тоже достаточно подробно.
Две главы посвящены отслеживанию положения пользователя с помощью GPS и работе с виджетом карты Google. И последняя глава посвящена Material Design.
В книге понравилось, что авторы показывают использование не только компонентов, встроенных в систему Android, но и использование библиотеки поддержки (support library), например, для работы с фрагментами, чтобы обеспечить работоспособность фрагментов в той версии Android, которая нативно их не поддерживает.
В книге для новичков не хватает «завершающего аккорда» — подпись файла APK и выпуск его в свет с помощью Google Play. Что-то про подпись файла APK сказано, но очень поверхностно и применительно к другой задаче — как получить доступ к Google Services.
В целом книга на троечку, но если вы только хотите «пощупать», что такое программирование под Android, то почитать ее можно.
Я буду благодарен, если вы посоветуете действительно качественную книгу про Android, может быть на английском языке, желательно, чтобы она была достаточно свежей. После прочтения этой книги у меня не сложилась полная мозаика из классов системы Android.
Программирование Android для начинающих — Третье издание
Здесь мы добавим на экран пару виджетов-кнопок, и тогда мы увидим быстрый способ заставить их что-то делать. Мы добавим кнопку двумя способами: во-первых, с помощью визуального конструктора, а во-вторых, добавив и отредактировав XML-код напрямую.
Добавление кнопки через визуальный конструктор
Чтобы начать работу с добавлением нашей первой кнопки, fragment_first.xml
, откройте ее в редакторе и переключитесь обратно в представление дизайна, щелкнув вкладку Design (показано ниже):
Рисунок 2.7 — Вкладка «Дизайн»
Обратите внимание, что в левой части макета у нас есть окно, которое называется Palette и показано следующим образом:
Рисунок 2.8 — Окно палитры
Палитра разделена на две части. В левом списке есть категории элементов пользовательского интерфейса и вы можете выбрать категорию, а затем в правой части отображаются все доступные элементы пользовательского интерфейса из текущей выбранной категории.
Убедитесь, что выбрана категория Common , как показано на предыдущем рисунке.Теперь щелкните левой кнопкой мыши и удерживайте виджет Button , а затем перетащите его на макет где-нибудь ближе к центру вверху.
Неважно, нет ли это. Тем не менее, полезно практиковаться, чтобы понять это правильно. Итак, если вас не устраивает положение вашей кнопки, вы можете щелкнуть левой кнопкой мыши, чтобы выбрать ее в макете, а затем нажать клавишу Удалить на клавиатуре, чтобы избавиться от нее. Теперь вы можете повторять предыдущий шаг, пока не получите новую аккуратно расположенную кнопку, которая вас устраивает, как здесь:
Рисунок 2.9 — Обновление макета
На этом этапе мы могли бы запустить приложение на эмуляторе или на реальном устройстве, и кнопка была бы там — вроде того. Если бы мы щелкнули по ней, была бы даже простая анимация, представляющая нажатую и отпускаемую кнопку. Не стесняйтесь попробовать это сейчас, если хотите. Если вы это сделаете, вы заметите, что кнопка расположена не так, как вы ожидали:
Рисунок 2.10 — Кнопка расположена неправильно
Пока не беспокойтесь об этой явной аномалии; мы рассмотрим это в следующих нескольких разделах.
Далее мы собираемся отредактировать атрибуты нашей кнопки в окне Attributes .
Редактирование атрибутов кнопки
Убедитесь, что кнопка выбрана, щелкнув ее левой кнопкой мыши. Теперь найдите окно Attributes справа от окна редактирования, как показано ниже:
Рисунок 2.11 — Окно атрибутов
На предыдущем рисунке вы можете видеть, что у нас есть доступ к широкому выбору атрибутов из текущего выбранного элемента пользовательского интерфейса.Чтобы раскрыть больше атрибутов, мы щелкаем по различным категориям атрибутов и прокручиваем их, используя полосу прокрутки справа. Если они еще не открыты по умолчанию, щелкните левой кнопкой мыши на стрелках разделов Common Attributes и All Attributes , чтобы открыть их параметры.
Теперь вы можете увидеть полную информацию о кнопке, и мы можем приступить к ее редактированию. Может показаться удивительным то значительное количество атрибутов, которое имеет такая простая вещь, как кнопка.Это признак универсальности и мощности, которые API Android предоставляет для управления пользовательским интерфейсом.
Как видите, существует большой массив различных атрибутов, которые мы можем редактировать прямо здесь, в дизайнере пользовательского интерфейса. В разделе Глава 13, , Анонимные классы — Реализация виджетов Android, , мы также будем редактировать эти атрибуты и управлять ими с помощью нашего Java-кода.
Пока мы редактируем только один атрибут. Прокрутите окно Attributes , пока не увидите атрибут onClick в разделе Common Attributes , а затем щелкните его левой кнопкой мыши, чтобы выбрать его для редактирования, как показано здесь:
Рисунок 2.12 — Раздел общих атрибутов
Примечание
Если у вас возникнут проблемы с поиском атрибута, вы всегда можете найти его в разделе Все атрибуты , где атрибуты расположены в алфавитном порядке. Следовательно, атрибут onClick также можно найти примерно на две трети от длинного списка раздела All Attributes .
Введите topClick
в поле редактирования атрибута onClick и нажмите Введите на клавиатуре.Обязательно используйте один и тот же регистр, включая несколько нелогичные строчные t
и прописные C
.
Когда вы закончите, окно Атрибуты будет выглядеть следующим образом:
Рисунок 2.13 — опция onClick
То, что мы здесь сделали, называется методом Java в нашем коде, который мы хотим вызывать, когда пользователь нажимает эту кнопку. Имя произвольно, но поскольку эта кнопка находится в верхней части экрана, имя кажется значимым и легко запоминающимся.Странный регистр, который мы использовали, — это соглашение, которое поможет нам сделать наш код ясным и легким для чтения. Мы увидим преимущества этого, когда наш код станет длиннее и сложнее.
Конечно, метод topClick
еще не существует. Android Studio очень полезна, но есть кое-что, что нам нужно сделать самостоятельно. Мы напишем этот метод с использованием кода Java после того, как добавим еще одну кнопку в наш пользовательский интерфейс. Вы можете запустить приложение на этом этапе, и оно все равно будет работать. Но если вы нажмете кнопку, произойдет сбой, и вы получите сообщение об ошибке, потому что метод не существует.Android Studio предупреждает нас об этом надвигающемся сбое, выделяя атрибут onClick красным, как показано на предыдущем рисунке. Если вы наведете курсор мыши на этот красный контур, вы увидите подробную информацию о проблеме: Соответствующий обработчик метода… Не найден .
Изучение XML-кода новой кнопки
Прежде чем мы добавим последнюю кнопку для этого проекта. Щелкните вкладку Code , чтобы вернуться к просмотру кода XML, который создает наш пользовательский интерфейс.
Обратите внимание, что среди XML, который мы исследовали ранее, есть новый блок кода. Вот изображение нового блока кода:
Рисунок 2.14 — Новый блок кода среди XML
Также обратите внимание на следующие детали, которые должны соответствовать тому, что мы знаем об элементах пользовательского интерфейса XML и Android:
- Новый код начинается с текста
- Код имеет ряд атрибутов, определяющих кнопку, включая
layoutWidth
иlayoutHeight
. - Код включает атрибут
onClick
, который мы только что добавили со значением«topClick»
. - Значение
topClick
атрибутаonClick
подчеркнуто красным, что указывает на ошибку отсутствующего метода. - Начало и конец кода, представляющего кнопку, заключены в элемент
ConstraintLayout
.
Как и в представлении «Дизайн», вы можете навести курсор мыши на подчеркнутый красным код topClick
, чтобы раскрыть подробности проблемы: Соответствующий обработчик метода… Не найден .
Примечание
Во время написания этой книги Android Studio обновила способ отображения ошибок в XML. В настоящее время он выделяет ошибку красным цветом, а не подчеркивает красным, как показано на рисунках и в описаниях. Подчеркивание более четкое в черно-белой печати, поэтому они оставлены как есть.
Мы видим, что проблема в том, что Android Studio ожидает, что метод с именем topClick
будет реализован в нашем Java-коде. Мы сделаем это, как только добавим вторую кнопку.
Добавление кнопки путем редактирования кода XML
Просто для разнообразия и чтобы доказать, что мы можем, теперь мы добавим еще одну кнопку, используя только XML-код, а не UI-дизайнер. В большинстве случаев мы будем использовать UI-дизайнер, но это быстрое упражнение должно укрепить в вашем сознании взаимосвязь между UI-дизайнером и лежащим в основе XML-кодом.
Мы добьемся этого, скопировав и вставив код для существующей кнопки. Затем мы внесем небольшие изменения в вставленный код.
Щелкните левой кнопкой мыши непосредственно перед кодом кнопки, который запускает
Рисунок 2.15 - Код кнопки
Это определило часть кода, которую мы хотим скопировать. Теперь щелкните левой кнопкой мыши и перетащите, чтобы выбрать весь код кнопки, включая выделенные начало и конец, как показано на следующем рисунке:
Рисунок 2.16 - Выбрать все кнопки с кодом
Нажмите комбинацию клавиш Ctrl + C , чтобы скопировать выделенный текст. Поместите курсор на клавиатуре под существующим кодом кнопки и несколько раз нажмите клавишу Введите , чтобы оставить несколько свободных пустых строк.
Нажмите комбинацию клавиш Ctrl + V , чтобы вставить код кнопки. На данный момент у нас есть две кнопки. Однако есть пара проблем:
Рисунок 2.17 - Дополнительная ошибка
У нас есть дополнительная ошибка в обоих блоках кода, которые представляют наши кнопки. Атрибут id
(в обоих блоках) подчеркнут красным. Причина этой ошибки в том, что обе кнопки имеют одинаковый атрибут id
. Атрибут id
должен отличать элемент пользовательского интерфейса от всех других элементов пользовательского интерфейса.Давай исправим это.
Назначение кнопкам уникальных атрибутов идентификатора
Мы могли бы решить проблему, вызвав вторую кнопку, button2
, но было бы целесообразнее изменить их обе. Измените код в первой кнопке, чтобы присвоить ей идентификатор buttonTop
. Для этого найдите следующую строку кода (в первой кнопке):
android: id = "@ + id / button"
Измените его на это:
android: id = "@ + id / buttonTop"
Примечание
Обратите внимание на строчные буквы b
в кнопке
и прописные T
в Top
.
Теперь определите эту строку кода во второй кнопке:
android: id = "@ + id / button"
Измените его на это:
android: id = "@ + id / buttonBottom"
Ошибки в строках атрибутов id
исчезли. На этом этапе вы можете подумать, что мы можем перейти к решению проблемы с отсутствующим методом.
Однако, если вы запустите приложение и быстро взглянете на него, вы увидите, что у нас есть только одна кнопка. Не только это, но (как уже упоминалось ранее) кнопки находятся не на том месте, где мы ожидали, что они будут:
Рисунок 2.18 - Одиночная кнопка
Причина в том, что мы не разместили их явно, поэтому по умолчанию они расположены в верхнем левом углу. Позиция, которую мы видим на вкладке Design , - это просто позиция времени разработки. Давайте изменим это сейчас.
Размещение двух кнопок в макете
Причина, по которой мы видим только одну кнопку, заключается в том, что обе кнопки находятся в одном и том же положении. Вторая кнопка точно закрывает первую. И даже на вкладке Design (не стесняйтесь взглянуть) кнопки по-прежнему расположены друг над другом, хотя они находятся посередине экрана.
Примечание
Вам может быть интересно, почему инструмент компоновки пользовательского интерфейса был разработан таким явно нелогичным способом. Причина в гибкости. Как мы увидим в следующих двух главах, можно не только позиционировать элементы пользовательского интерфейса по-разному во время разработки и во время работы приложения, но также существует целый ряд различных схем макета, которые разработчик приложения (то есть вы) может выбрать. от в соответствии с их планами. Такая гибкость приводит к некоторой неловкости при изучении Android, но дает большую дизайнерскую мощь, как только вы преодолеваете неловкость.Не волнуйтесь: мы будем двигаться шаг за шагом, пока вы не победите эту штуку.
Мы заставим Android Studio решить эту проблему автоматически, сначала добавив в наш код, а затем используя дизайнер пользовательского интерфейса. Во-первых, давайте исправим макет во время разработки. В коде для второй кнопки найдите эту строку кода:
инструменты: layout_editor_absoluteY = "30dp" />
Измените его так, чтобы он был таким же:
инструменты: layout_editor_absoluteY = "100dp" />
Это небольшое изменение немного сдвинет вторую кнопку вниз, но только на время разработки.Если вы посмотрите на вкладку Design , кнопка аккуратно расположена под первой кнопкой, но если вы запустите приложение в эмуляторе, они оба все еще будут в верхнем левом углу и друг над другом.
Примечание
Возможно, даже вероятно, что точные размеры dp
в вашем макете будут немного отличаться от тех, что показаны в книге. Пока атрибут layout_editor_absoluteY
второй кнопки примерно на 70dp
больше, чем первый, все будет аккуратно и аккуратно.Не стесняйтесь поиграть с этим атрибутом на обеих кнопках, переключаясь между вкладками Code и Design , пока кнопки не будут расположены так, как вам нравится.
Когда вас устраивает положение кнопок, переключитесь на вкладку Design и найдите кнопку Infer constraints , как показано ниже:
Рисунок 2.19 - Кнопка вывода ограничений
Нажмите кнопку Вывести ограничения . Android Studio отредактирует XML.Давайте вкратце посмотрим, что произошло за кулисами. С конца обеих кнопок были удалены следующие строки кода.
Если ограничения не применяются, нажмите кнопку Очистить все ограничения , которая находится слева от Вывести ограничения ; иногда Android Studio может запутаться, и ей необходимо сбросить существующие ограничения, прежде чем вывести остальные:
инструменты: layout_editor_absoluteX = "147dp" инструменты: layout_editor_absoluteY = "30dp" />
Эти две строки кода позиционировали кнопки горизонтально (… absoluteX
) и вертикально (… absoluteY
).
Android Studio также добавила четыре строки кода к первой кнопке и три - ко второй. Вот код, добавленный в начале первой кнопки:
android: layout_marginTop = "30dp"
Этот код заставляет кнопку иметь поле 30 вверху. Но вверху относительно чего именно? Посмотрите на эти три строки кода, которые были добавлены в конец первой кнопки:
приложение: layout_constraintEnd_toEndOf = "parent" app: layout_constraintStart_toStartOf = "родительский" app: layout_constraintTop_toTopOf = "parent" />
Обратите внимание на новые атрибуты layout_constraintEnd_toEndOf
, layout_constraintStart_toStartOf
и layout_constraintTop_toTopOf
.Каждому из этих атрибутов присвоено значение «родительский»
. Это заставляет первую кнопку позиционироваться относительно родительского элемента пользовательского интерфейса . Родителем является содержащий макет: элемент ConstraintLayout
.
Теперь посмотрите на три строки кода, добавленные ко второй (нижней) кнопке.
В начале кода мы видим это:
android: layout_marginTop = "22dp"
И в конце кода для второй кнопки мы видим эти две лишние строки:
приложение: layout_constraintStart_toStartOf = "@ + id / buttonTop" app: layout_constraintTop_toBottomOf = "@ + id / buttonTop" />
Это означает, что вторая кнопка расположена с полем 22 относительно виджета buttonTop
.
Примечание
Код dp
является единицей измерения / расстояния и будет более подробно рассмотрен в Глава 5 , Красивые макеты с CardView и ScrollView . Точные значения для измерения dp
, вероятно, будут немного отличаться в зависимости от вашего макета.
Теперь запустите приложение, и вы увидите, что у нас есть две отдельные кнопки. Один имеет id
атрибут buttonTop
, и он находится над другой кнопкой с id
атрибутом buttonBottom
:
Рисунок 2.20 - Варианты с двумя кнопками
Очевидно, что макеты - это нечто большее, чем я упоминал до сих пор, но вы впервые увидели один из вариантов, которые у нас есть для разработки пользовательского интерфейса наших приложений. Мы более подробно рассмотрим элемент макета ConstraintLayout
, а также изучим дополнительные параметры макета в Глава 4 , Начало работы с макетами и материальным дизайном .
Мы хотим внести еще одно изменение в наш XML-код.
Заставить кнопки вызывать разные методы
Вернитесь на вкладку Код и определите следующую строку кода во второй кнопке (кнопка внизу
):
android: onClick = "topClick"
Измените код на этот:
android: onClick = "bottomClick"
Теперь у нас есть две кнопки, одна над другой.Верхний имеет атрибут id
из buttonTop
и атрибут onClick
со значением topClick
. Другой имеет атрибут id
из buttonBottom
и атрибут onClick
со значением bottomClick
.
Эти последние изменения кода XML теперь означают, что нам нужно закодировать два метода ( topClick
и bottomClick
) в нашем коде Java.
Примечание
Это нормально, если две кнопки вызывают один и тот же метод при нажатии; это не синтаксическая ошибка.Однако у большинства кнопок разные цели, поэтому это упражнение будет более значимым, если наши кнопки будут выполнять разные функции.
Мы сделаем это в ближайшее время, но прежде давайте узнаем немного больше о комментариях Java и рассмотрим некоторый код Java, который мы можем написать для отправки сообщений. Мы научимся отправлять сообщения пользователю, чтобы держать его в курсе, и себе в целях отладки.
Murach's Android Programming (2nd Edition)
Щелкните любой заголовок главы, чтобы отобразить или скрыть его содержание.
Раздел 1 Быстрое начало работы с Android
Глава 1 Введение в Android и Android Studio
Обзор Android
Типы устройств
Типы приложений
Краткая история
Версии
Системная архитектура
Как приложения компилируются и запускаются
Введение в Android Studio
Как работать со страницей приветствия
Как открыть существующий проект
Как просмотреть пользовательский интерфейс приложения
Как посмотреть код приложения
Как запустить приложение на физическом устройстве
Как запустить приложение на эмуляторе
Пользовательский интерфейс
Глава 2 Как запустить первое приложение для Android
Приложение "Калькулятор чаевых"
Пользовательский интерфейс
Как создать новый проект
Как разработать пользовательский интерфейс
Как работать с макетом
Как добавить виджеты в макет
Как установить отображаемый текст
Как работать с файлами ресурсов
Как установить свойства
Общие свойства
XML для пользовательского интерфейса
Глава 3 Как закончить свое первое приложение для Android
Как написать код Java
Как работать с деятельностью
Как удалить библиотеку поддержки v7 appcompat
Как получить ссылки на виджеты
Как обрабатывать событие EditorAction
Как получить и установить текст для виджетов
Жизненный цикл деятельности
Как сохранить и восстановить значения
Код Java для приложения
Дополнительные навыки для завершения приложения
Как работать со скриптом сборки Gradle
Как работать с зависимостями
Как работать с Android-манифестом
Как установить значок запуска для приложения
Как использовать документацию для Android API
Глава 4 Как протестировать и отладить приложение для Android
Базовые навыки тестирования и отладки
Типовые этапы испытаний
Как проверить макет
Как обрабатывать ошибки времени выполнения
Как отследить выполнение кода
Как использовать LogCat
Как использовать тосты
Как использовать отладчик
Как устанавливать и удалять точки останова
Как пройти через код
Как проверить переменные
Как проверить трассировку стека
Как создавать эмуляторы
Как создать эмулятор для планшета
Как создать эмулятор для телефона с жесткой клавиатурой и DPad
Раздел 2 Основные навыки работы с Android
Глава 5 Как работать с макетами и виджетами
Введение в макеты и виджеты
Сводка схем
Обзор виджетов
Иерархия представлений
Как работать с макетами
Как использовать линейную раскладку
Как использовать раскладку стола
Как использовать макет кадра
Как размещать макеты
Как сделать альбомную ориентацию
Как работать с виджетами
Как использовать редактируемые текстовые представления
Как использовать флажки
Как использовать радиокнопки
Как пользоваться блеснами
Как использовать стержни поиска
Как отображать изображения
Как показать и скрыть виджеты
Как добавить полосы прокрутки
Как отображать веб-контент
Глава 6 Как обрабатывать события
Обзор слушателей
События высокого уровня
События низкого уровня
Четыре метода обработки событий
Как использовать текущий класс в качестве слушателя
Как использовать именованный класс в качестве слушателя
Как использовать анонимный класс в качестве слушателя
Как использовать анонимный внутренний класс в качестве слушателя
Когда использовать каждую технику
Как обрабатывать события высокого уровня
Как обрабатывать события для флажков и переключателей
Как обрабатывать события для радиогрупп
Как обрабатывать события для спиннеров
Как обрабатывать события для баров поиска
Как обрабатывать низкоуровневые события
Как обрабатывать ключевые события
Как обрабатывать события касания
Приложение "Калькулятор чаевых"
Пользовательский интерфейс
Код Java для действия
Глава 7 Как работать с темами и стилями
Введение в темы и стили
Три общие темы
Как предоставить разные темы для разных API
Как преобразовать существующий проект в тему AppCompat
Как работать со стилями
Как определить стиль
Как применить стиль
Как создать таблицу стилей
Как работать с темами
Как изменить встроенную тему
Как изменить тему AppCompat
Как изменить тему в зависимости от API
Как изменить внешний вид текста для темы
Обзор встроенных тем
Как применять темы
Как работать с цветами
Как определить цвета
Как наносить цвета
Глава 8 Как работать с меню и предпочтениями
Как работать с меню
Знакомство с меню
Как определить меню
Как отобразить меню опций
Как обрабатывать события меню опций
Как начать новую деятельность
Как работать с настройками
Знакомство с настройками
Как определить предпочтения
Как отобразить настройки
Как получить преференции
Как использовать настройки
Дополнительные навыки работы с настройками
Как сгруппировать предпочтения
Как включить и отключить настройки
Как использовать Java для работы с настройками
Глава 9 Как работать с фрагментами
Введение в фрагменты
Однопанельные и многопанельные макеты
Методы жизненного цикла фрагмента
Как использовать однопанельные макеты для маленьких экранов
Как создать макет для фрагмента
Как создать класс для фрагмента
Как отобразить фрагмент в действии
Как создать фрагмент предпочтения
Как отобразить фрагмент предпочтения в действии
Как использовать многопанельные макеты для больших экранов
Как добавить несколько фрагментов в макет
Как определить ширину экрана
Как управлять программной клавиатурой
Прочие навыки работы с фрагментами
Как получить ссылку на фрагмент
Как заменить один фрагмент другим
Раздел 3 Приложение News Reader
Глава 10 Как работать с потоками, файлами, адаптерами и намерениями
Знакомство с приложением News Reader
Пользовательский интерфейс
XML для RSS-канала
Как работать с потоками
Как работают потоки
Как выполнять асинхронные задачи
Как выполнять рассчитанные по времени задачи
Как обновить поток пользовательского интерфейса
Как работать с файлами
Как скачать файл из Интернета
Как разобрать XML-файл
Класс RSSFeedHandler
Класс RSSFeed
Класс RSSItem
Как работать с переходниками
Как создать макет для представления списка
Как использовать адаптер для отображения данных в виде списка
Как обрабатывать события для адаптера
Как работать с намерениями
Как передавать данные между действиями
Как просмотреть URL-адрес в веб-браузере
Как дозвониться или позвонить по номеру телефона
Приложение News Reader
Макет activity_items
Класс ItemsActivity
Класс FileIO
Макет activity_item
Класс ItemActivity
Глава 11 Как работать с сервисами и уведомлениями
Как работать с объектом Application
Как определить объект приложения
Как зарегистрировать объект Application
Как использовать объект Application
Как работать с услугами
Жизненный цикл услуги
Как создать услугу
Как зарегистрировать услугу
Как запустить и остановить службу
Как использовать потоки со службами
Как протестировать услугу
Как просмотреть все услуги
Как работать с уведомлениями
Как работают уведомления
Как создать ожидающее намерение
Как создать уведомление
Как работать с системными службами
Как отобразить или удалить уведомление
Как проверить, доступно ли сетевое соединение
Приложение News Reader
Класс NewsReaderService
Класс ItemsActivity
Класс FileIO
Глава 12 Как работать с радиовещательными приемниками
Как работать с системными трансляциями
Сводка системного вещания
Как закодировать приемник для загрузки завершенной трансляции
Как закодировать приемник для трансляции измененного подключения
Как работать с пользовательскими трансляциями
Как создать и отправить индивидуальную трансляцию
Как закодировать приемник для пользовательской трансляции
Раздел 4 Приложение «Список задач»
Глава 13 Как работать с базами данных SQLite
Введение в базы данных
Пользовательский интерфейс приложения Task List
Введение в SQLite
Введение в базу данных Task List
Бизнес-объекты для приложения Task List
Как создать класс базы данных
Как определить константы для базы данных
Как определить операторы SQL, которые создают базу данных
Как создать или обновить базу данных
Как открыть и закрыть соединение с базой данных
Как добавить общедоступные методы в класс базы данных
Как получить несколько строк из таблицы
Как получить одну строку из таблицы
Как получить данные из курсора
Как вставлять, обновлять и удалять строки
Как проверить базу данных
Как проверить класс базы данных
Как удалить тестовые данные с устройства
Как работать с файлом базы данных
Как использовать браузер БД для SQLite
Глава 14 Как работать с вкладками и пользовательскими адаптерами
Как использовать вкладки
Как добавить класс TabManager в ваш проект
Макет занятия, отображающий вкладки
Класс для действия, отображающего вкладки
Класс для фрагмента, отображающего содержимое вкладки
Как использовать специальный адаптер
Макет для элемента списка
Класс, расширяющий макет для элемента представления списка
Класс для нестандартного адаптера
Класс для фрагмента, который использует настраиваемый адаптер
Приложение "Список задач"
Пользовательский интерфейс
Меню activity_task_list
Класс TaskListActivity
Макет activity_add_edit и spinner_list
Меню activity_add_edit
Класс AddEditActivity
Глава 15 Как работать с контент-провайдерами
Знакомство с поставщиками контента
URI для контент-провайдеров
MIME-типов для контент-провайдеров
Как добавить вспомогательные методы в класс базы данных
Как создать контент-провайдера
Как запустить класс поставщика контента
Как обеспечить запрос
Как предусмотреть вставку строк
Как обеспечить обновление строк
Как предусмотреть удаление строк
Как зарегистрировать контент-провайдера
Как использовать контент-провайдера
Как использовать настраиваемого поставщика содержимого
Как использовать встроенный контент-провайдер
Как работать с диалоговым окном
Как импортировать класс диалога и интерфейс
Как построить и показать диалоговое окно
Приложение "История задач"
Пользовательский интерфейс
XML для макетов
Код Java для действия
Глава 16 Как работать с виджетами приложений
Знакомство с виджетами приложений
Главный экран с виджетами приложений
Как удалить виджеты приложений
Как добавить виджеты приложений
Как создавать виджеты приложений
Как создать макет
Как изменить класс базы данных
Как создать класс провайдера
Как настроить виджет приложения
Как зарегистрировать виджет приложения
Как протестировать виджет приложения
Раздел 5 Продвинутые навыки работы с Android
Глава 17 Как развернуть приложение
Введение в распространение и монетизацию
Как работает раздача
Как работает монетизация
Как создать сборку выпуска
Как подготовить приложение к выпуску
Как создать подписанный APK-файл
Как раздавать напрямую пользователю
Как распространять через сайт
Как распространять по электронной почте
Как опубликовать в Google Play
Как создать учетную запись издателя
Как использовать консоль разработчика для публикации приложения
Как просмотреть список для приложения
Глава 18 Как работать с локациями и картами
Знакомство с локациями и картами
Пользовательский интерфейс приложения Run Tracker
Введение в определение местоположения
Знакомство с картами
Знакомство с Google Maps Android API
Как настроить Google Maps Android API v2
Как создать новый проект Google Maps
Как добавить сервисы Google Play в существующий проект
Как получить ключ API Карт Google
Как установить разрешения и функции
Как работать с локациями
Как подключиться к сервисам Google Play
Как узнать текущее местоположение
Как справиться с ошибкой подключения
Как получать обновления местоположения
Как убедиться, что GPS включен
Как работать с Google Maps
Как добавить фрагмент карты в макет
Как отобразить карту
Как увеличить локацию
Как добавить маркеры
Как складывать строки
Приложение Run Tracker
Макет activity_run_map
Класс RunMapActivity
Класс RunTrackerService
Android в действии, третье издание
Включена бесплатная электронная книга предыдущего выпуска!
Электронная копия предыдущего издания этой книги включена без дополнительной платы.Он будет автоматически добавлен на вашу книжную полку в течение 24 часов после покупки.
Золотой стандарт учебников Android.
Габор Паллер, Ericsson
Заглянуть внутрь
Android в действии, третье издание - это подробное руководство для разработчиков Android.Эта быстро развивающаяся книга поставит вас на место водителя - вы освоите SDK, создадите приложения WebKit с использованием HTML 5 и даже научитесь расширять или заменять встроенные функции Android, создавая полезные и интригующие примеры.
о технике
Когда дело доходит до мобильных приложений, Android может делать почти все, и с этой книгой вы тоже сможете! Android, популярная мобильная операционная система Google и SDK для планшетов и смартфонов, является самой широкой доступной мобильной платформой.Он основан на Java, поддерживает HTML5 и обладает функциями, которые требуются современным мобильным пользователям.
о книге
Android в действии, третье издание выводит вас далеко за рамки «Hello Android». Вы освоите SDK, создадите приложения WebKit с использованием HTML 5 и даже научитесь расширять или заменять встроенные функции Android. Вы найдете интересные примеры на каждой странице по мере изучения кроссплатформенной графики с помощью RenderScript, обновленной системы уведомлений и Native Development Kit.Эта книга также знакомит с важными концепциями планшета, такими как перетаскивание, фрагменты и панель действий, все новое в Android 3.
что внутри
- Охватывает разработку Android 3.x
- SDK и WebKit с нуля
- Управление роботом с помощью Bluetooth и датчиков
- Обработка изображений с помощью собственного кода C
о ридере
Эта книга написана для любителей и разработчиков.Полезно иметь опыт работы с Java - предварительный опыт работы с Android не предполагается.
об авторе
Фрэнк Аблсон и Роби Сен - предприниматели, специализирующиеся на мобильных и веб-продуктах, а также на новых беспроводных технологиях соответственно. Крис Кинг - старший инженер мобильной связи, а К. Энрике Ортис - мобильный технолог, разработчик и автор.
10 лучших Android-книг по разработке приложений в 2021 году [Рейтинг]
Что такое Android?
Вы, должно быть, слышали об этом - или, возможно, прямо сейчас у вас в руках! Около 85% проданных устройств используют Android в качестве ОС.
Android - популярная мобильная операционная система, разработанная Google. Большинство популярных телефонов, таких как Samsung, Google Nexus, Sony Xperia, основаны на Android. Android - это система с открытым исходным кодом, т.е .; ОС может быть настроена разработчиками в зависимости от телефона.
Android основан на ядре Linux. Программы Android пишутся на Java с использованием ASDK (Android Software Development Kit) и запускаются через виртуальную машину Java (JVM), оптимизированную для мобильных устройств.
Если вы готовитесь к собеседованию с Android, просмотрите самые популярные вопросы собеседования с Android с подробными ответами.
Преимущества и особенности Android
Android - одна из наиболее широко используемых ОС, и есть множество приложений, которые можно загрузить из магазина Google Play, помимо встроенных приложений, поставляемых с телефоном. Некоторые особенности и преимущества Android:
- Открытый исходный код и бесплатно - малым предприятиям легко разрабатывать приложения на свой выбор
- Огромное сообщество и поддержка
- Богатая среда разработки
- Разработка приложений очень рентабельная
- Интуитивно понятный интерфейс
- Широкие возможности подключения.
- Обширная поддержка формата медиафайлов.
- Хранение данных с использованием SQLite
- Виджеты с изменяемым размером
- Мультитач и многозадачность
Как изучить Android
Разработка
для Android выполняется легко и быстро, и вы можете научиться этому с помощью учебных курсов, видео, руководств и, конечно же, хороших книг! Хотя некоторые утверждают, что вы можете изучить это за месяц, мы предлагаем вам потратить время на то, чтобы шаг за шагом погрузиться в концепции, применить то, что вы прочитали в книге или увидеть в учебном пособии, на практике и следить за документацией на веб-сайте разработчика Android. обновления и поддержка.Для изучения Android необходимы базовые знания Java.
Лучшие книги для Android
Мы выбрали 10 лучших Android-книг, которые будут обновлены для разработки Android в 2021 году. Давайте посмотрим ниже.
1. Программирование на Android: Руководство по ранчо Big Nerd
Это хорошая книга и справочное руководство для начинающих, и даже если у вас есть некоторый опыт, вы узнаете много нового из этой книги. Книга охватывает все основные концепции Android, включая активность, темы, темы, представления, фрагменты, сетевое взаимодействие и т. Д.и в книге нет ни одного лишнего слова. Каждая глава, каждый абзац открывает читателю целый мир новых вещей.
Характеристики:
- Подробные объяснения всех важных концепций и API
- Вы должны знать основы Kotlin (для последней редакции), хотя автор освещает некоторые его части; предыдущие редакции основаны на Java
- Приведено множество практических примеров, которые помогут вам научиться лучше
- Книга обновлена последними изменениями в Android studio и другими инструментами
- Автор сохраняет хороший темп на протяжении всей книги
Оценка: 4.6
Стоимость: Kindle: 24,10 доллара США
Мягкая обложка: 23,75 доллара США
Вы можете купить эту книгу здесь.
2. Разработка Android в первую очередь
Это лучшая книга для разработчиков Android, а также для начинающих и программистов следующего уровня. Прежде чем приступить к чтению этой книги, вы должны знать Java. Если у вас уже есть какое-то представление о программировании для Android, вам может показаться, что книга немного медленная и однообразная, но она станет отличным напоминанием всего, что вы уже знаете.Тон автора веселый и остроумный, с понятными пояснениями и примерами кода.
Характеристики:
- Пошаговый подход.
- Охвачено много тем, но из-за авторского подхода никогда не чувствуешь себя обременительным.
- Отличные проекты, которые познакомят вас с основами и подготовят к следующему уровню.
- Рукописные аннотации, пробелы между текстами книги дают хорошее ощущение правильного коучинга.
- Подробно описывает основы.
- Немного многословно для опытных.
Рейтинг: 4,5
Стоимость : Kindle: 15,09 доллара
Мягкая обложка: 24,77 доллара
Вы можете купить эту книгу здесь.
3. Программирование на Java для разработчиков Android для чайников
Это не та книга, в которой вас будут кормить с ложечки всеми концепциями. Автор упоминает множество терминов и концепций и рекомендует вам больше узнать о них через онлайн-контент; например, эмулятор Android и то, как вы можете запускать на нем приложения.Тем не менее, автор прилагает много усилий, чтобы с легкостью изучить Java и Android. Если вы уже знаете Java, вы можете пропустить введение в Java, так как оно может показаться вам очень длинным.
Характеристики:
- Освещает основы Java и Android.
- Тон автора остроумный и забавный, доставляющий удовольствие от чтения.
- Некоторые концепции Java не объясняются подробно, и автор ожидает, что вы будете искать подробности в других источниках.
- Книга хорошо организована и начинается с введения как Java, так и Android, а затем объясняет, как они работают вместе, создавая реальные приложения.
- Подчеркивает важность создания небольших блоков кода в одном месте и их повторного использования в других местах.
Рейтинг : 4,5
Стоимость : Kindle: 18,39 долларов США
Мягкая обложка: 19,99 долларов США
Вы можете купить эту книгу здесь.
4. Комплексное решение для разработки Android-приложений для чайников
Аккуратная и хорошо структурированная книга Android для чайников, несомненно, поднимет ваш интерес к Android на гораздо более высокий уровень.Это книга для начинающих, которая познакомит вас со всеми основными концепциями. Автор объясняет, что вам нужно знать как начинающему разработчику, и не перегружает вас дополнительной информацией, которую вы можете понять.
Характеристики:
- Книга начинается с основ Android, от эмулятора до студии Android; однако предполагается, что у вас уже есть некоторые предварительные знания языка программирования.
- Множество советов, наблюдений и уловок на боковых панелях и в других местах делают книгу интерактивной и интересной для чтения.
- Автор заставляет задуматься о проблеме и возможных подходах к ней, прежде чем дать окончательный ответ. Это помогает читателям думать, а не просто копировать и вставлять код, чтобы заставить его работать.
- Простое изложение, без многословия, только развлечения, остроумие и информация
- Если вы новичок в программировании самого программного обеспечения, возможно, будет трудно следовать этой книге.
Рейтинг : 4,4
Стоимость : Kindle: 20,79 долларов США
Мягкая обложка: 23,78 долларов США
Вы можете купить эту книгу здесь.
5.
Программирование для Android: выходя за рамки
Это ваш идеальный компаньон, если вы уже выполнили несколько проектов для Android и ищете дополнительные знания и сложные проекты. Без многословия, ясного и краткого содержания, эта книга очень хорошо объясняет все функции - даже самые последние. Если вы хотите раскрыть свой творческий потенциал и найти вызовы, это книга, которую вы должны прочитать и изучить. Такие темы, как потоки, JUnit, настройка производительности, подробно рассматриваются вместе с другими основными концепциями.
Характеристики:
- Уникальная книга, содержание которой вы не найдете ни в одной другой книге.
- Хорошее сочетание базовых и продвинутых концепций.
- Книга не только объясняет, что нужно делать, но также объясняет, почему что-то делается.
- Книга поможет вам правильно определить, какие темы наиболее важны с точки зрения развития, и сколько вам нужно знать по каждой теме.
- Быстро развивающаяся и загруженная как базовым, так и продвинутым содержанием.
Рейтинг : 4,2
Стоимость : Kindle: 26,39 долларов США
Мягкая обложка: 29,70 долларов США
Вы можете купить эту книгу здесь.
6. Дизайн графического интерфейса для приложений Android
Это хорошая книга для тех, кто хочет изучить Android с нуля. Версия этой книги для Kindle бесплатна, поэтому для тех, кто не знает, чего ожидать и хотите ли вы изучать Android или нет, эта книга может стать отправной точкой. Книга не содержит подробностей, но охватывает все важные концепции создания простых приложений для Android.Существует множество примеров кода, тематических исследований и руководств, которые помогут вам легко понять дизайн пользовательского интерфейса, что в противном случае является сложной задачей.
Характеристики:
- Начиная с очень простой информации об Android, читатели должны знать Java и XML, чтобы полностью оценить содержание.
- Создает прочную основу для новых разработчиков Android.
- Вы можете увидеть опыт и знания автора в примерах кода, использованных в книге.
- Если у вас уже есть некоторый опыт разработки Android, эта книга будет не очень полезна.
Рейтинг : 4,1
Стоимость : Kindle: 0,0 $
Мягкая обложка: 16,99 $
Вы можете купить эту книгу здесь.
7.
Руководство Busy Coder по расширенной разработке под Android
Это книга для продвинутого уровня, и вы должны уметь писать простые приложения и программы, прежде чем брать эту книгу. Это исчерпывающее руководство и справочник, которые вы можете держать на рабочем месте, чтобы обращаться к ним во время работы над проектом или использовать в качестве подробного материала для изучения продвинутого Android.Автор не только рассказывает о технических аспектах, но также упоминает, как Android впервые разработал передовые методы, чтобы следовать, и подробно описывает примеры кода.
Характеристики:
- Продвинутая книга для профессиональных разработчиков Android
- Книга хорошо структурирована и следует за пошаговым введением понятий одна за другой
- Полный справочник с понятным, кратким примером кода и реальными приложениями
- Если вы купите версию Kindle (цифровую), вы получите дополнительные книги, которые улучшат ваше обучение.Цифровая версия также регулярно обновляется автором, поэтому ее новая и более точная
- В книге не рассматриваются основы или введение, и сразу же начинаются более сложные темы
- В книге дополнительно рассматриваются такие темы, как NFC, динамические фрагменты, создание виджетов приложений на основе списков и т. Д.
Рейтинг : 3,8
Стоимость :
Мягкая обложка: 47,96 долларов США
Вы можете купить эту книгу здесь.
8.
Профессиональный Android
Замечательная книга для разработчиков Android от среднего до экспертного уровня.Эта книга охватывает все передовые практики и разбирается в архитектуре, жизненном цикле, пользовательском интерфейсе и многих других аспектах Android. Примеры простые, но действенные и очень хорошо объяснены. Практический подход, использованный в этой книге, выделяет ее среди других книг, доступных на рынке. Чтобы изучить эту книгу, вы должны знать основы Java.
Характеристики:
- Множество проектов, охватывающих все новые возможности Android.
- Практический подход, который поможет вам быстро создавать реальные приложения.
- Обширная информация об Android Studio IDE и Kotlin.
- Включает в себя сервисы firebase и google play, такие как карты Google, сервисы на основе местоположения, API осведомленности и многое другое.
- Подробно описывает привязку данных, планировщик заданий и компоненты архитектуры.
- В книге представлены некоторые темы, которые не рассматриваются подробно, поэтому вы можете дополнить свое обучение интерактивными учебными пособиями или блогами.
Рейтинг : 3,7
Стоимость : Kindle: 26,39 долларов США
Мягкая обложка: 26,54 долларов США
Вы можете купить эту книгу здесь.
9. Шаблоны проектирования для Android
Знание шаблонов проектирования для разработки на любом языке экономит много времени и усилий и помогает создавать приложения с передовыми практиками и более чистым кодом. В этой книге делается попытка сделать то же самое с помощью 58 различных паттернов. Книга разделена на части и постепенно переходит от разработки приложений для телефона, ОС Android, фрагментации Android, антипаттернов (с указанием типичных ошибок) и, наконец, шаблонов проектирования.В каждой главе объясняется один образец.
Характеристики:
- Включает шаблоны для мобильных приложений и приложений для планшетов.
- В книге нет кода, но даются пошаговые инструкции по использованию каждого шаблона проектирования.
- Хорошо объясненные советы и рекомендации о том, как правильно и неправильно что-то делать.
- Около 70 шаблонов проектирования пользовательского интерфейса, включая 58 шаблонов и 12 антипаттернов.
- Книга содержит подробную информацию об Android, iOS и других мобильных интерфейсах.
- Примеры, использованные в книге, взяты из реальных приложений, которые вы также можете изучить самостоятельно.
- Множество полезных изображений, демонстраций и обсуждений, которые побудят вас узнать больше об Android.
Рейтинг : 3,5
Стоимость : Kindle: 22,50 долл. США
Мягкая обложка: 36,05 долл. США
Вы можете купить эту книгу здесь.
10. Начало разработки игр для Android 4
Это хороший учебник для тех, кто хочет начать разработку игр на платформе Android.Он охватывает базовые игровые основы, основы Android и Java; тем не менее, перед чтением этой книги рекомендуется иметь некоторые предварительные знания о Java. Книга мягко знакомит читателей с платформой Android и продвигается к созданию игрового движка, а также разработке 2D и 3D игр с использованием OpenGL ES и Canvas API.
Характеристики:
- Даже если у вас уже есть базовое представление об играх, книга будет полезна, поскольку она дает полезные сведения об особенностях и подводных камнях платформы Android.
- Автор оставляет некоторую часть кода без объяснения, чтобы читатель мог отлаживать, тестировать и заполнять пробелы, что способствует самообучению.
- Книга дает подробное объяснение libGDX и дает внешние ссылки для лучшего изучения.
Рейтинг : 3,0
Стоимость : Kindle: 39,99 долларов США
Мягкая обложка: 41,65 долларов США
Вы можете купить эту книгу здесь.
Заключение
Вы можете начать разработку приложений для Android в Windows, Mac или Linux, и вам потребуется Java JDK5 или новее и Android Studio.В нашем списке представлены все типы книг, предназначенные для начинающих, продвинутых и опытных программистов. Если вы только начинаете, лучшими книгами для вас будут «Разработка приложений Android все в одном для чайников» и «Дизайн графического интерфейса для приложений Android». Если вы просто ищете быстрое и удобное справочное руководство, идеальным выбором должны стать «Программирование под Android: руководство для большого ботаника на ранчо» или «Руководство по продвинутой разработке под Android от занятого программиста». Для продвинутых разработчиков «Программирование под Android: раздвигая границы» и «Руководство занятого программиста по продвинутой разработке под Android» - одни из лучших книг.Сообщите нам, с какой книги вы собираетесь начать сегодня!
Еще читают:
Разработка приложений для Android для чайников, 3-е издание, электронная книга
Обновленное издание бестселлера по разработке приложений для Android
Если у вас есть амбиции создать приложение для Android, в этом практическом руководстве вы найдете все необходимое, чтобы погрузиться в процесс разработки и воплотить свою прекрасную идею в жизнь! В этом новом выпуске Android App Development for Dummies вы найдете простой доступ к новейшим методам программирования, использующим новые функции операционной системы Android.Кроме того, предоставляются две программы: простая программа для начинающих и промежуточная программа, которая использует более сложные аспекты платформы Android.
Мобильные устройства
Android в настоящее время составляют почти 80% мирового рынка мобильных телефонов, что делает их лучшей платформой для охвата максимально широкой аудитории. С помощью этого дружелюбного руководства разработчики всех мастей быстро узнают, как установить необходимые инструменты, разработать хороший пользовательский интерфейс, понять различия в дизайне между приложениями для телефона и планшета, обработать ввод пользователя, избежать распространенных ошибок и «Мех» приложение в приложение, которое собирает аплодисменты.
- Создавайте действительно крутые приложения для новейших смартфонов и планшетов Android
- Адаптируйте существующие приложения для использования на устройстве Android
- Начать работу с программами и инструментами для создания приложений Android
- Опубликуйте свои приложения в Google Play Store
Независимо от того, новичок вы или опытный программист, Android App Development For Dummies поможет вам освоить все тонкости платформы Android в кратчайшие сроки.
Год книги:
2015 г.
Книжных страниц:
432
ISBN:
11120
Язык книги:
en
Размер файла:
16.61 МБ
Тип файла:
pdf
Опубликовано:
10 апреля 2019 года - 17:54
Android 6 для программистов% 3a Подход, ориентированный на приложения% 283rd Edition% 29% 28deitel Developer Series% 29
Сводка
Руководство профессионального программиста Deitel® по разработке приложений для смартфонов и планшетов с использованием Android ™ 6 и Android Studio. Миллиарды приложений были загружены из Google Play ™! В этой книге вы найдете все необходимое, чтобы быстро приступить к разработке отличных приложений и опубликовать их в Google Play ™.В книге используется подход, основанный на приложениях: каждая новая технология обсуждается в контексте восьми полностью закодированных и протестированных приложений для Android, с затенением синтаксиса, выделением кода, пошаговыми руководствами и примерами выходных данных. Приложения, которые вы будете разрабатывать, включают: Welcome App Cannon Game Tip Calculator Weather Viewer Flag Quiz Twitter® выполняет поиск в адресной книге Doodlz
Практичный, богатый на примерах охват: Android 6, Android Studio: Gradle ™, Vector Asset Studio, Theme Editor
Material Design Шаблоны и темы приложений Библиотека AppCompat, библиотека поддержки дизайна Android, RecyclerView, FloatingActionButton, TextInputLayout
Повышение уровня дизайна материалов и значки REST Web Services / JSON, Threading, База данных SQLite ™, разрешения Android 6
Курсоры, загрузчики, ContentProvider, поддерживающие различные размеры / разрешения экрана Специальные возможности, интернационализация
Действия, фрагменты, намерения, настройки GUI, макеты, меню, файлы ресурсов, события, обработка касаний / жестов, изображения, аудио, графика, анимация, иммерсивный режим, PrintHelper
Магазин Google Play ™, публикация приложений, цены, маркетинг , Реклама в приложениях, биллинг в приложениях, виртуальные товары и многое другое. Посетите www.deitel.com Загрузить примеры кода Для получения информации об учебных курсах программирования Deitel Dive Into® Series посетите www.deitel.com/training или напишите по адресу [email protected] Следите за Deitels на Facebook® на facebook.com/DeitelFan, в Twitter® на @deitel, Google + ™ на google.com/+DeitelFan, LinkedIn® на bit.ly/DeitelLinkedIn, YouTube ™ на youtube.com/DeitelTV Подпишитесь на информационный бюллетень Deitel ® Buzz по адресу www.deitel.com/newsletter/ subscribe .html Об этой книге Телефоны Android первого поколения были выпущены в октябре 2008 года.По состоянию на июнь 2015 года на долю Android приходилось 82,8% мирового рынка смартфонов по сравнению с 13,9% у Apple и 2,6% у Microsoft (http://www.idc.com/prodserv/smartphone-os-market-share.jsp) . Миллиарды приложений были загружены из Google Play, и в 2014 году по всему миру было поставлено более одного миллиарда устройств Android (http://www.cnet.com/news/android-shipments-exceed- 1-миллиард-впервые- в 2014/). Возможности для разработчиков приложений для Android огромны. В этой книге представлены передовые вычислительные технологии для профессиональных разработчиков программного обеспечения.В основе книги лежит подход Deitel, основанный на приложениях: концепции представлены в контексте полностью работающих приложений Android, а не с использованием фрагментов кода. Введение и тест-драйвы приложений в начале каждой главы показывают один или несколько примеров выполнения. Исходный код книги доступен по адресу http://www.deitel.com/books/AndroidFP3. Приложения в этой книге были тщательно разработаны, чтобы познакомить вас с ключевыми функциями и API Android. Вы быстро узнаете все, что вам нужно, чтобы приступить к созданию приложений для Android, начиная с тестового запуска приложения «Калькулятор чаевых» в главе 1, а затем создавая по одному новому приложению в каждой из глав со 2 по 9.К тому времени, когда вы дойдете до главы 10, вы будете готовы создавать свои собственные приложения для отправки в Google Play и другие торговые площадки. Вы освоите процесс отправки в Google Play, включая загрузку приложений. Вы будете решать, продавать ли свои приложения или предлагать их бесплатно, и узнаете, как продвигать их через социальные сети и монетизировать их с помощью рекламы в приложениях, биллинга в приложениях, виртуальных товаров и т. Д.
Ученик Android | raywenderlich.com
для начинающих на Android!
Если вы новичок в Android или разрабатываете на Kotlin, эта книга для вас.
Android Apprentice проведет вас на всем пути от создания вашего первого приложения до подачи вашего приложения на продажу. К концу книги у вас будет достаточно опыта, чтобы воплотить свои расплывчатые идеи в реальные приложения, которые вы сможете выпустить в Google Play Store.
Вы создадите 4 полных приложения с нуля - каждое приложение немного сложнее предыдущего. Вместе эти приложения научат вас работать с наиболее распространенными элементами управления и API, используемыми разработчиками Android по всему миру.
И это тоже не простые приложения; вы создадите все, от простой игры до приложения с контрольным списком, приложения на основе карты, а также менеджера подкастов и проигрывателя!
Мы также включили несколько дополнительных разделов о решении проблемы фрагментации Android, о том, как поддерживать приложение в актуальном состоянии, о подготовке приложения к выпуску, тестировании приложения и публикации его для всего мира!
Если вы новичок в программировании для Android, вам понадобится руководство, которое:
- Пошаговые инструкции по написанию приложения
- С тоннами иллюстраций и скриншотов, чтобы все было понятно
- В веселой и непринужденной манере!
Мы написали эту книгу на Kotlin: новом современном первоклассном языке для разработчиков Android.Вы будете в авангарде разработчиков Android во всем мире, когда научитесь разрабатывать на гибком и выразительном языке Kotlin.
The Android Apprentice - ваш лучший помощник в изучении разработки для Android. Исходный код проекта включен в книгу, а форумы поддержки находятся прямо на нашем сайте - это просто лучший способ начать карьеру разработчика Android.
Перед тем, как начать
В этом разделе рассказывается о некоторых вещах, которые необходимо знать перед началом работы, например о том, что вам понадобится для аппаратного и программного обеспечения, где найти файлы проекта для этой книги и многое другое.
Раздел I. Ваше первое приложение для Android
Это ваше введение в создание приложений для Android. В этом разделе приведены пошаговые инструкции по установке Android Studio и работе в среде IDE и визуального дизайнера при создании Timefighter , простой игры, в которой используются многие распространенные компоненты Android.
Чтобы приступить к созданию этого потрясающего приложения для Android, вам понадобятся некоторые инструкции по установке инструментов, которые понадобятся вам в качестве молодого ученика.Разработка под Android происходит в Android Studio, настраиваемой среде IDE, основанной на IntelliJ, которая предоставляет вам мощный набор инструментов для работы.
1
Если кирпичи и раствор являются основой прочного здания, то Layouts - это Android-эквивалент надежного приложения. Макеты невероятно гибкие и позволяют вам определять, как ваш пользовательский интерфейс будет представлен на устройстве пользователю.
2
Приложения
Android построены на основе набора экранов, которые имеют определенное назначение.
Каждый экран, который вы видите в приложении, называется действием.
Activity строится вокруг одной задачи, которую вы хотите, чтобы ваш пользователь выполнял.
3
В предыдущих двух главах вы сосредоточились на разработке TimeFighter.
в полноценное приложение.В этой главе,
вы сосредоточитесь на том, как отлаживать приложение, когда оно начинает обнаруживать ошибки.
4
В этой последней главе вы узнаете, как настроить приложение
придерживаться Руководства по дизайну материалов,
как добавить небольшие штрихи, чтобы придать вашему приложению ощущение безупречности,
и как добавить в приложение простую анимацию, чтобы оживить его.
5
Раздел II: Создание приложения-списка
Добро пожаловать в раздел II книги! Вы оставите последнее созданное приложение и создадите совершенно новое.Это новое приложение называется Listmaker и позволит вам и вашим пользователям создавать удобные списки, которые вы можете просмотреть позже.
В предыдущем разделе у вас был начальный проект для начала создания приложения. Но в этом разделе вы создадите свой собственный проект с нуля! Вы пройдете по шагам и сделаете выбор, чтобы убедиться, что ваш проект настроен с самого начала.
Вы также узнаете, как сохранять данные в своем приложении с помощью SharedPreferences и создавать различные экраны, посвященные разным задачам.Ближе к концу раздела вы узнаете, как изменить свое приложение для адаптации к разным размерам экрана с помощью Fragments . Наконец, вы измените дизайн Listmaker, улучшив его, чтобы он соответствовал Material Design . Рекомендуемый язык дизайна для приложений Android.
В предыдущем разделе у вас был начальный проект для начала создания приложения.
Но в этом разделе вы создадите свой собственный проект с нуля!
Вы пройдете по шагам и сделаете выбор, чтобы убедиться, что ваш проект настроен с самого начала.
6
В разработке под Android самый простой способ реализовать списки
в вашем приложении - использовать класс RecyclerView.
Вы узнаете, как начать работу с RecyclerView,
как настроить адаптер RecyclerView для заполнения вашего списка данными,
и как настроить ViewHolder для обработки макета каждого элемента в вашем списке.
7
В этой главе вы добавите в ListMaker функциональные возможности для создания,
сохранять и удалять списки.Вы узнаете, что такое SharedPreferences и как их можно использовать для
сохранять и извлекать пользовательские данные.
8
По мере того, как ваше приложение становится более сложным, мы пытаемся втиснуть больше визуальных
элементы в один экран становится сложно,
и может запутать ваше приложение для пользователей.
В этой главе вы узнаете, как создавать отдельные Активы,
как общаться между Activity с помощью Intent, и
как передавать данные между Activity.
9
В этой главе вы собираетесь создать действие, которое вы
созданный в предыдущей главе со знакомыми компонентами
например RecyclerView для отображения списка,
и добавьте FloatingActionButton, чтобы добавить задачи в список.
Вы также узнаете, как вернуться к предыдущему действию с помощью намерения.
10
Когда дело доходит до написания кода, привлекательный пользовательский интерфейс, который адаптируется к
на всех устройствах Android с экранами разного размера все может быть непросто!
Хотя вы пока не собираетесь создавать приложение для холодильника (дайте ему время),
в этой главе вы узнаете, что такое фрагменты и как они работают
с Activity и как разбить Activity на фрагменты.
11
Material Design - это язык дизайна, нацеленный на стандартизацию
как пользователь взаимодействует с приложением.
Это варьируется от всего до нажатия кнопок и виджетов.
презентация и позиционирование, даже анимация в приложении.
В этой главе вы обновите ListMaker, чтобы он принял некоторые принципы Material Design.
12
Раздел III: Создание картографических приложений
В этом разделе вы создадите PlaceBook , приложение на основе местоположения, которое позволяет добавлять в закладки любимые места и сохранять заметки о каждом месте.В этом разделе представлены несколько новых концепций, включая Google Maps, базу данных комнат, навигацию по выдвижным ящикам и управление камерой.
Вы когда-нибудь были в поездке и хотели делать записи?
о местах, которые вы посетили?
Или нужно было предупредить себя в будущем об изжоге.
жирная еда из придорожной закусочной?
Если да, то вам повезло! Вы собираетесь создать PlaceBook,
приложение, которое отвечает всем этим требованиям, позволяя добавлять в закладки и
делать заметки, используя интерфейс на основе карты.
13
В этой главе вы улучшите работу с картой,
автоматическое центрирование карты относительно местоположения пользователя при запуске,
и позволяя пользователю повторно центрировать карту к своему текущему местоположению в любое время.
14
Прежде чем вы сможете достичь своей конечной цели - разрешить пользователям добавлять места в закладки,
вам нужно позволить им идентифицировать существующие места на карте.В этой главе вы узнаете, как определить, когда пользователь нажимает
на месте и используйте API Google Адресов, чтобы получить подробную информацию о месте.
15
Теперь, когда пользователь может нажимать на места для отображения всплывающего информационного окна,
пора дать им возможность делать закладки и редактировать место.
Вы узнаете о библиотеке сохранения состояния комнаты и о том, как она вписывается в общую архитектуру компонентов Android.
16
В этой главе вы добавите возможность редактировать закладки.
Это потребует создания нового действия для отображения сведений о закладке с редактируемыми полями.
17
В настоящее время единственный способ найти существующую закладку - это найти ее булавку на карте.В этой главе вы добавите возможность прямого перехода к закладкам,
и вы замените фотографию закладкой.
18
В этой главе вы добавите несколько штрихов, которые улучшат
как внешний вид, так и удобство использования приложения PlaceBook.
Несмотря на то, что PlaceBook прекрасно функционирует как есть,
Часто именно небольшие штрихи делают приложение отличным.
19
Раздел IV: Создание менеджера и проигрывателя подкастов
Этот раздел стал более продвинутым. Вы собираетесь создать менеджер подкастов и приложение для проигрывания под названием PodPlay . Вы расскажете о сети, уведомлениях, работе с REST и XML, а также о медиа-библиотеках Android.
В этом разделе вы собираетесь использовать многие навыки, которые у вас есть.
уже изучил и погрузился в некоторые более продвинутые области разработки Android.Вы создадите полнофункциональный менеджер подкастов и приложение для проигрывания под названием PodPlay.
Это приложение позволит искать и подписываться на подкасты из iTunes и
предоставить интерфейс воспроизведения с элементами управления скоростью.
20
Создание интерфейса поиска может быть таким же простым, как добавление текстового представления,
ответ на ввод текста пользователем и заполнение
RecyclerView с результатами.Хотя этот метод работает нормально,
Android SDK предоставляет встроенную функцию поиска, которая помогает защитить ваши приложения в будущем.
21 год
Теперь, когда пользователь может найти свои любимые подкасты,
вы готовы добавить экран с подробными сведениями о подкасте.
В этой главе вы спроектируете и создадите подробный фрагмент подкаста,
разверните архитектуру приложения и добавьте фрагмент сведений о подкасте.
22
До этого момента вы имели дело только с деталями подкаста верхнего уровня.
А теперь пора глубже погрузиться в подробности эпизода подкаста.
и это включает в себя загрузку и анализ RSS-каналов.
23
Предоставляя пользователям возможность искать подкасты и отображать
эпизоды подкаста, вы добились больших успехов в разработке
приложения для подкастов.В этой секции,
вы добавите возможность подписаться на любимые подкасты.
24
Теперь, когда пользователь может подписаться на подкасты,
полезно уведомлять их о появлении новых серий.
В этой главе вы обновите приложение, чтобы периодически проверять наличие новых выпусков в фоновом режиме и публиковать уведомление, если таковые будут обнаружены.
25
На данный момент вы создали приличное приложение для управления подкастами - жаль, что
нет возможности слушать контент.В этой главе,
вы узнаете, как создать медиаплеер, воспроизводящий аудио
и видеоподкасты, а также интегрируется в экосистему Android.
26 год
В предыдущей главе вам удалось добавить воспроизведение звука в приложение,
но вы перестали добавлять какие-либо встроенные функции воспроизведения.
В этой последней главе этого раздела вы закончите работу с PodPlay.
app, добавив полный интерфейс воспроизведения и поддержку видео.
27
Раздел V: Совместимость с Android
В этом разделе рассматриваются две темы Android, которые почти так же важны, как и само приложение Android: как обрабатывать коллекцию версий Android, известную как проблема фрагментации , и как наилучшим образом поддерживать ваше приложение в актуальном состоянии. постоянных обновлений Android.
В идеальном мире каждое устройство Android будет работать с одной версией
Android и разработка приложений будет легко.К сожалению, мир несовершенен. По состоянию на май 2017 г.
в мире было два миллиарда активных Android-устройств,
все работают под управлением различных версий и разновидностей Android.
В этой главе исследуется история версий Android,
и как разработчики могут настроить таргетинг на максимальное количество версий Android.
28 год
Чем больше вы вкладываете в свое приложение, тем большую ценность для пользователей увидят в продукте.Постоянное обновление вашего приложения - стимул для роста этой важной группы пользователей. Публикация приложения - это достижение, но поддержка приложения в ближайшие годы - еще большее достижение.
29
Раздел VI: Публикация вашего приложения
Теперь, когда вы создали свое приложение, вам нужно представить его миру! В этом разделе есть две главы, в которых вы узнаете, как подготовить приложение к выпуску, как протестировать приложение и как опубликовать приложение для ожидающих поклонников!
Итак, вы наконец создали то приложение, о котором мечтали.Пришло время поделиться этим со всем миром!
Но с чего начать?
Хотя в этой главе основное внимание будет уделено подготовке приложения для магазина Google Play, большинство шагов будет применяться независимо от платформы публикации.
30
В этой главе вы завершите процесс публикации приложения.
и откройте для себя дополнительные способы распространения вашего приложения.Вы также пройдете альфа- и бета-тестирование, чтобы
убедитесь, что ваше приложение готово поделиться с миром.
31 год
.