基礎&応用力をしっかり育成!Androidアプリ開発の教科書 Kotlin対応 なんちゃって開発者にならないための実践ハンズオン (CodeZine BOOKS)

【最新 – Androidアプリ開発を学ぶおすすめ本 – 入門・独学勉強法】も確認する

アプリ開発の基礎が身に付く

「アプリ開発ってどこから手をつけたらいいの…?」という方におすすめの一冊です。しっかりと基礎をおさえた内容であり、Androidでのアプリ開発の一通りの流れがわかります。脱・初心者への足がかりとなる本です。

はじめに

本書のもととなるJava版の『Androidアプリ開発の教科書』が刊行されたのが2018年の2月です。その時は、Android Studio 3.0がリリースされたばかりでした。そのリリースで一番注目されたのが、Kotlinの正式サポートです。

そのKotlinは、それまでもJVM言語のひとつとして注目はされていましたが、注目されつつも定着しなかった他のJVM 言語と同様の道をたどる可能性も否定できない状況でし た。それがAndroidアプリ開発言語のひとつとして正式サポートされてからは、1年と待たずにあっという間に花形言語へと成長した感があります。さらに、2019年5月のGoogle I/O 2019で、GoogleはAndroidにおけるKotlin ファーストを強化していくと表明しました。

ここにきて、Androidアプリ開発ではKotlinが中心的言語になりつつあります。そうした状況の中、ありがたくもKotlin版の『Androidアプリ開発の教科書』をここに無事刊行できました。「Kotlin対応」とついていることから想像できるかもしれませんが、本書を通して作成するサンプルは、あえてJava版と同じものにしています。

もちろん、本書単独でも学習していただけるものではありますが、場合によっては、Java版と対比させることによって、Kotlin と Javaの書き方の相違点と共通点、さらには、KotlinとJavaという言語を問わずに共通で使える Androidアプリ開発の知識を学 べる副次的効果も狙っています。

もっとも、Java版を執筆した時点からAndroid Studio自体のバージョンが3.4へとアップしており、Android OSのバージョンも9 (Pie)へとアップしています。それに伴って、Android Studioの操作方法、および、アプリ作成の方法が変化したところは、最新の内容に書き換えています。

さて、本書もJava版同様に、ほぼすべてのソースコードを掲載し、それらを実際に入力、実行しながらアプリ開発を習得できるようにしています。掲載ソースコードは、眺めるだけではなく、実際にソースコードを入力し、アプリを実行してみてください。つまり、手を動かすことです。手を動かしてこそ理解できる解説があります。その積み重ねが本書の副題にある「なんちゃって開発者にならないための」第一歩だと思っています。

本書がその手助けとなれば、これほどうれしいことはありません。

齊藤新三

本書の使い方

本書の特徴は、各章1~2本のアプリを実際に手を動かして学んでもらえるようにしていることです。 ほぼすべてのソースコードを掲載していますので、それらを入力し、実際にアプリを実行させて確認し てみてください。

学習の進め方
各章に手順と書かれた項がいくつかあります。

これが実際に手を動かしていただく項です。この順番通りに作業すると、実際にアプリを作成でき、 実行できるようになります。この手順は読み飛ばすのではなく、パソコンの前に座って実際に作業を 行ってください。
その後の項では手順項で作業した内容の解説が続きます。

また、本書では章を読み進めるごとに順に新しい技術が身につくようにしています。もちろんどこか の章だけを読むことも可能ですが、できるならはじめから順に読み進めるようにしてください。

Kotlinについて
本書はAndroidアプリ開発の入門書であって、Kotlinの入門書ではありません。ですので、言語とし てのKotlinの解説は、本書では行っておりません。また、ある程度Kotlin言語が扱えることを前提とし て解説を行っています。もし、言語としてのKotlinが未習、あるいは、あやふやな場合は、以下の書籍 などで言語としてのKotlinを習得してから本書に取り組むようにしてください。
Kindle本「速習 Kotlin」 山田祥寛 (WINGSプロジェクト)

サンプルプログラムについて
本書では、ほぼすべてのソースコードを誌面に掲載しているので、基本的にはサンプルプログラムを 別途ダウンロードして確認する必要はありません。 サンプルプログラムのファイルはzip圧縮されて おり、全アプリがAndroid Studioプロジェクトの 形式で含まれています。Android Studioプロジェ クトは1プロジェクトが1フォルダとなっていますの で、各フォルダが1つのアプリを作成するプロジェ クトです。

▲サンプルプログラムのフォルダ構成
これを開くには、Android Studioを起動し、 Welcome画面から[Open an existing Android Studio project]を選択します。もし、すでに他の プロジェクトが開いている状態ならば、[File]メ ニューから[Open] を選択してください。表示され た「Open File or Project」ウィンドウから、解凍 したフォルダ内の該当するプロジェクトを選択し、 [OK]をクリックすると、そのプロジェクトが開きます。

▲「Open File or Project」ウィンドウ
以降は、本文中での解説を参考に、ソースコードをコピーしたり改変したりできます。また、アプリ の実行も可能です。

動作確認環境
本書内の記述/サンプルプログラムは、以下の環境で動作確認しています。
・Windows 10 Pro
・macOS High Sierra (10.13)
・Android Studio 3.4.1

本書の表記
・紙面の都合でコードを折り返す場合、行末に口を付けています。
・Noteの囲みでは、注意事項や関連する項目、知っておくと便利な事柄などを紹介しています。

目次

はじめに
本書について

第1章 Androidアプリ開発環境の作成
11.1 Androidのキソ知識
1.1.1 Androidの構造
1.1.2 AndroidStudio
1.1.3 Kotlin言語の正式サポート

1.2 Android Studioのインストール
1.2.1 Windowsの場合
1.2.2 macOSの場合
1.2.3 Android Studioの初期設定を行う
1.2.4 アップデートを確認
1.2.5 追加のSDKをダウンロード

第2章 はじめてのAndroidアプリ作成
2.1 はじめてのAndroidプロジェクト
2.1.1 手順 Android StudioのHelloAndroidプロジェクトを作成する
2.1.2 Android Studioプロジェクトの作成はウィザードを使う
2.1.3 プロジェクト作成情報

2.2 AVDの準備
2.2.1 手順 AVDを作成する
2.2.2 手順 AVDを起動して初期設定を行う

2.3 アプリの起動。
2.3.1 手順 アプリを起動する

2.4 Android Studioの画面構成とプロジェクトのファイル構成
2.4.1 Android Studioの画面構成とProjectツールウィンドウのビュー
2.4.2 Androidビューのファイル構成

2.5 Android アプリ開発の基本手順
2.5.1 strings.xmlの働きは重要
2.5.2 Androidアプリ開発手順にはパターンがある

第3章 ビューとアクティビティ
3.1 ビューの基礎知識
3.1.1 手順 ラベルを画面に配置する
3.1.2 レイアウトファイルを編集する「レイアウトエディタ」
3.1.3 画面部品の配置を決めるビューグループ
3.1.4 画面部品そのものであるビュー
3.1.5 画面構成はタグの組み合わせ
3.1.6 画面部品でよく使われる属性

3.2 画面部品をもう1つ追加する
3.2.1 手順 入力欄を画面に配置する
3.2.2 アプリを手軽に再実行するInstant Run機能
3.2.3 入力欄の種類を設定する属性

3.3 レイアウトエディタのデザインモード
3.3.1 デザインモードでの画面各領域の名称
3.3.2 デザインモードのツールバー

3.4 デザインモードで部品を追加してみる
3.4.1 デザインモードでの画面作成手順
3.4.2 手順 デザインモードでボタンを画面に配置する
3.4.3 XMLがどうなったか確認してみる

3.5 LinearLayoutで部品を整列する
3.5.1 手順 LinearLayoutを入れ子に配置する
3.5.2 レイアウト部品を入れ子にした場合の画面構造

3.6 他のビュー部品―ラジオボタン/選択ボックス/リスト
3.6.1 手順 単一選択ボタンを設置するラジオボタン
3.6.2 複数のRadioButtonはRadioGroupで囲む
3.6.3 手順選択ボックスを設置する―Spinner
3.6.4 リストデータは string-arrayタグで記述する
3.6.5 手順リストを表示する―ListView
3.6.6 一定の高さの中でリストデータを表示するListView

第4章 イベントとリスナ
4.1 アプリ起動時に実行されるメソッド
4.1.1 手順 画面を作成する
4.1.2 アクティビティのソースコードを確認する
4.1.3 リソースを管理してくれるRクラス

4.2 イベントリスナ
4.2.1 イベントとイベントハンドラとリスナ
4.2.2 Androidでリスナを設定する手順
4.2.3 手順 リスナクラスを作成する
4.2.4 リスナクラスは専用のインターフェースを実装する
4.2.5 手順 イベントハンドラメソッドに処理を記述する
4.2.6 アクティビティ内で画面部品を取得する処理
4.2.7 入力文字列の取得と表示
4.2.8 手順 リスナを設定する
4.2.9 リスナインターフェースに対応したリスナ設定メソッド

4.3 ボタンをもう1つ追加してみる
4.3.1 手順 文字列とボタンを追加する
4.3.2 手順 追加されたボタンの処理を記述する
4.3.3 idで処理を分岐

第5章 リストビューとダイアログ
5.1 リストタップのイベントリスナ
5.1.1 手順 画面を作成する
5.1.2 手順 リストをタップしたときの処理を記述する
5.1.3 リストビュータップのリスナは OnltemClickListener インターフェースを実装する
5.1.4 お手軽にメッセージを表示できるトースト
5.1.5 リストビュータップのリスナは onitemClickListenerプロパティに代入

5.2 アクティビティ中でリストデータを生成する
5.2.1 手順 アクティビティ中でリストを生成するサンプルアプリを作成する
5.2.2 リストビューとリストデータを結びつけるアダプタクラス

5.3 ダイアログを表示する
5.3.1 手順 ダイアログを表示させる処理を記述する
5.3.2 Androidのダイアログの構成
5.3.3 ダイアログを表示するにはDialogFragmentを継承したクラスを作成する
5.3.4 ダイアログオブジェクトの生成処理はビルダーを利用する
5.3.5 ダイアログのボタンタップはwhichで分岐する

第6章 ConstraintLayout
6.1 ConstraintLayout
6.1.1 Android Studioのデフォルトレイアウト
6.1.2 ConstraintLayoutの特徴

6.2 制約の設定には制約ハンドルを使う
6.2.1 [準備] ライブラリが追加済みか確認する
6.2.2 手順 TextViewが1つだけの画面を作成する
6.2.3 設定された制約の確認

6.3 ConstraintLayoutにおける3種類のlayout_width/height
6.3.1 手順 「名前」のラベルと入力欄を追加する
6.3.2 ConstraintLayout CIAO layout_width/height
6.3.3 手順 残りの部品を追加する

6.4 横並びとペースライン
6.4.1 横並びに変更も簡単
6.4.2 ベースラインを揃える

6.5 ガイドラインを利用する
6.5.1 手順 「名前」入力欄と「メールアドレス」入力欄の左端を揃える
6.5.2 制約の設定先として利用できるガイドライン

6.6 チェイン機能を使ってみる
6.6.1 ボタンを3つ均等配置する
6.6.2 複数の画面部品をグループ化できるチェイン機能

第7章 画面遷移とIntentクラス
7.1 2行のリストとSimpleAdapter
7.1.1 手順 定食メニューリスト画面を作成する
7.1.2 柔軟なリストビューが作れるアダプタクラス SimpleAdapter
7.1.3 データと画面部品を結びつける from-to

7.2 Androidの画面遷移
7.2.1 手順 画面遷移のコードと新画面のコードを記述する
7.2.2 画面を追加する3種の作業
7.2.3 Androidの画面遷移は遷移ではない
7.2.4 アクティビティの起動とインテント
7.2.5 引き継ぎデータを受け取るのもインテント
7.2.6 タップ処理をメソッドで記述できる onClick属性
7.2.7 戻るボタンの処理はアクティビティの終了

7.3 アクティビティのライフサイクル
7.3.1 アクティビティのライフサイクルとは何か
7.3.2 手順 ライフサイクルをアプリで体感する
7.3.3 AndroidのログレベルとLog クラス
7.3.4 ログの確認は Logcatで行う
7.3.5 ライフサイクルコールバックをログで確認する

第8章 オプションメニューとコンテキストメニュー
8.1 リストビューのカスタマイズ
8.1.1 手順 IntentSampleアプリと同じ部分を作成する
8.1.2 リストビュー各行のカスタマイズはレイアウトファイルを用意するだけ

8.2 オプションメニュー
8.2.1 オプションメニューの例
8.2.2 手順 オプションメニュー表示を実装する
8.2.3 オプションメニュー表示はXMLとアクティビティに記述する
8.2.4 手順 オプションメニュー選択時処理を実装する
8.2.5 オプションメニュー選択時の処理はIDで分岐する

8.3 戻るメニュー
8.3.1 手順 戻るメニューを実装する
8.3.2 戻るメニュー表示はonCreate()に記述する

8.4 コンテキストメニュー
8.4.1 手順 コンテキストメニューを実装する
8.4.2 コンテキストメニューの作り方はオプションメニューとほぼ同じ
8.4.3 手順 コンテキストメニュー選択時の処理を実装する
8.4.4 コンテキストメニューでも処理の分岐はidのR値とwhen文

第9章 フラグメント
9.1フラグメント
9.1.1 前章までのサンプルをタブレットで使うと
9.1.2 フラグメントによる画面構成

9.2 スマホサイズのメニューリスト画面のフラグメント化
9.2.1 手順 メニューリスト画面をフラグメントで実現する
9.2.2 フラグメントはアクティビティ同様にXMLとKotlin クラス
9.2.3 フラグメントのライフサイクルとonCreateView()メソッド
9.2.4 フラグメントでのコンテキストの扱い
9.2.5 フラグメントのアクティビティへの埋め込み

9.3 スマホサイズの注文完了画面のフラグメント化
9.3.1 手順 注文完了画面をフラグメントで実現する
9.3.2 様々なところで登場する所属アクティビティ

9.4 タブレットサイズ画面を作成する
9.4.1 手順 メニューリスト画面を10インチに対応する
9.4.2 画面サイズごとに自動でレイアウトファイルを切り替えてくれるlayout-##
9.4.3 10インチの画面構成

9.5 注文完了フラグメントのタブレット対応
9.5.1 スマホサイズとタブレットサイズの処理の違い
9.5.2 手順 注文完了フラグメントをタブレットに対応する
9.5.3画面判定フラグがキモ
9.5.4 フラグメントトランザクション
9.5.5 Intentの引き継ぎデータはBundle に格納されている
9.5.6 フラグメント間のデータ引き継ぎもBundle

第10章 データベースアクセス
10.1 Androidのデータ保存

10.2 Androidのデータベース利用手順
10.2.1 手順 カクテルのメモアプリを作成する
10.2.2 Androidのデータベースの核となるヘルパークラス
10.2.3 手順 データベース処理を追加する
10.2.4 データベースヘルパークラスの作り方
10.2.5 ヘルパークラスの生成、解放処理
10.2.6 データ更新処理 10.2.7 データ取得処理

第11章 非同期処理とWeb API連携
11.1 AndroidのWeb連携
11.2 非同期処理

11.3 AsyncTask
11.3.1 手順 お天気情報アプリを作成する
11.3.2 手順 非同期処理コードを記述する
11.3.3 AsyncTaskを利用する手順
11.3.4 AsyncTaskのその他のメソッド

11.4 HTTP接続
11.4.1 手順 手間天気情報の取得処理を記述する
11.4.2 Androidのインターネット接続はHTTP接続
11.4.3 HTTP接続の許可
11.4.4 HttpURLConnection クラスのその他のプロパティ

第12章 メディア再生
12.1 音声ファイルの再生
12.1.1 手順 メディア再生アプリを作成する
12.1.2 手順 メディア再生のコードを記述する
12.1.3 音声ファイルの再生はMediaPlayerクラスを使う
12.1.4 メディアの再生と一時停止
12.1.5 MediaPlayerの破棄
12.1.6 MediaPlayerの状態遷移

12.2 戻る・進むボタン
12.2.1 手順 戻る・進む処理のコードを記述する
12.2.2 再生位置を指定できるseekTo()

12.3 リピート再生
12.3.1 手順 リピート再生のコードを記述する
12.3.2 スイッチ変更検出用リスナは OnCheckedChangeListener インターフェース
12.3.3 メディアのループ設定は setLooping()プロパティ

第13章 バックグラウンド処理と通知機能
13.1 サービス
13.1.1 手順 サービスサンプルアプリを作成する
13.1.2 手順 サービスに関するコードを記述する
13.1.3 サービスはService クラスを継承したクラスとして作成
13.1.4 サービスのライフサイクル

13.2 通知
13.2.1 通知とは
13.2.2 手順 通知を実装する
13.2.3 通知を扱うにはまずチャネルを生成する
13.2.4 通知を出すにはビルダーとマネージャが必要

13.3 通知からアクティビティを起動する
13.3.1 手順 通知からアクティビティを起動する処理を実装する
13.3.2 通知からアクティビティの起動は PendingIntentを使う

第14章 地図アプリとの連携とGPS機能の利用
14.1 暗黙的インテント
14.1.1 2種のインテント
14.1.2 手順 暗黙的インテントサンプルアプリを作成する
14.1.3 手順 地図アプリとの連携に関するコードを記述する
14.1.4 暗黙的インテントの利用はアクションとURL

14.2 緯度と経度指定で地図アプリを起動するURI…
14.2.1 手順 緯度と経度で地図アプリと連携するコードを記述する

14.3 GPS機能の利用
14.3.1 手順 GPS機能を利用するコードを記述する
14.3.2 LocationManagerで位置情報を利用する

14.4 GPS利用の許可設定
14.4.1 手順 GPS機能利用の許可とパーミッションチェックのコードを記述する
14.4.2 アプリの許可はパーミッションチェックが必要
14.4.3 パーミッションダイアログに対する処理は onRequestPermissionsResult()メソッド

第15章 カメラアプリとの連携
15.1 カメラ機能の利用
15.1.1 カメラ機能を利用する2種類の方法
15.1.2 手順 カメラ連携サンプルアプリを作成する
15.1.3 カメラアプリを起動する暗黙的インテント
15.1.4 アプリに戻ってきたときに処理をさせる

15.2 ストレージ経由での連携
15.2.1 手順 ストレージ経由でカメラアプリと連携するように改造する
15.2.2 ストレージ利用許可を与える
15.2.3 Androidストレージ内部のファイルはURIで指定する
15.2.4 URI指定でカメラを起動する

第16章 マテリアルデザイン
16.1 マテリアルデザイン
16.1.1 マテリアルデザインとは
16.1.2 Androidのマテリアルデザイン
16.1.3 Androidのマテリアルテーマの確認
16.1.4 マテリアルデザインの4色

16.2 ScrollView
16.2.1 手順 ツールバーサンプルアプリを作成する
16.2.2 画面をスクロールさせたい場合にはScrollViewを使う

16.3 アクションバーより柔軟なツールバー
16.3.1 手順 ツールバーを導入する
16.3.2 ツールバーを使うにはアクションバーを非表示に
16.3.3 ツールバーの各種設定はアクティビティに記述する

16.4 ツールバーのスクロール連動
16.4.1 手順 スクロール連動サンプルアプリを作成する
16.4.2 サポートライブラリを利用するにはビルド設定が必要
16.4.3 スクロール連動のキモはCoordinatorLayout
16.4.4 アクションバー部分を連動させるAppBarLayout
16.4.5 CoordinatorLayout配下でスクロールするにはNestedScrollViewを使う
16.4.6 enterAlwaysモードでのスクロール連動のまとめ

16.5 CollapsingToolbarLayoutの導入
16.5.1 手順 CollapsingToolbarLayoutを導入する
16.5.2 AppBarLayoutのサイズを変更するには CollapsingToolbarLayoutを使う

16.6 CollapsingToolbarLayoutにタイトルを設定する
16.6.1 手順 CollapsingToolbarLayoutにタイトルを設定する
16.6.2 CollapsingToolbarLayoutは通常サイズと縮小サイズで文字色を変えられる

16.7 FloatingActionButton (FAB)
16.7.1 手順 FABを追加する
16.7.2 FABは浮いたボタン

16.8 Scrolling Activity

第17章 リサイクラービュー
17.1 リストビューの限界

17.2 リサイクラービューの使い方
17.2.1 手順 リサイクラービューサンプルアプリを作成する
17.2.2 手順 リサイクラービューに関するソースコードを記述する
17.2.3 リサイクラービューにはレイアウトマネージャーとアダプタが必要
17.2.4 リストデータの見え方を決めるレイアウトマネージャー
17.2.5 リサイクラービューのアダプタは自作する
17.2.6 ビューホルダはアイテムのレイアウトに合わせて作成する
17.2.7 アダプタにはアイテムの生成とデータ割り当て処理を記述する

17. 3区切り線とリスナ設定
17.3.1 手順 区切り線とリスナ設定のコードを記述する
17.3.2 区切り線は手動で設定する
17.3.3 リスナはインフレートした画面部品に対して設定する

索引