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

【最新 – Androidアプリ開発を学ぶおすすめ本 – 入門・独学勉強法】も確認する
AndroidStudio3.0のマニュアル
主にAndroid Studioでの開発方法がメインとなっており、Android Studio の使い方から、Android特有のコーディング方法まで記載されています。とても丁寧に作られた内容です。最終章まで読み進めれば一通りアプリが作れるようになります。
はじめに
本書は、開発者のためのWebマガジン「CodeZine」で2016年3月~2017年3月の約1年間 連載していた『Android Studio 2で始めるアプリ開発入門』をベースとしつつ、連載では書きき れなかった内容や省略した説明、手順を大幅に加筆、再構成して書籍化したものです。この連載 の目的は、プレビュー版(正式リリース前のバージョン)のAndroid Studio 2を使いながらアプリ開発をイチから解説することでした。そのAndroid Studio 2も連載途中に正式リリースとな り、早いもので現在ではバージョン3が正式リリースされています。もちろん本書も Android Studio 3に対応しています。
では、Android Studioのバージョンがアップしたからといって、アプリの開発手法がガラッと 変わるのでしょうか。もちろん変わるところもありますが、その基礎的な考え方や手法は変わっ ていません。
Androidアプリ開発では、ソースコードにパターンを見ることができます。このパターンの ソースコードをコピーし、一部を書き換えることで違う動きのアプリを作成することができてしま います。それでアプリは正常に動作しますが、このようなアプリ開発ではソースコードの本質を理解しているとはいえません。私はこのような開発者を「なんちゃって開発者」と呼んでいます。
本書は、これからAndroidアプリ開発者を目指す入門者に、このような「なんちゃって開発者」 になってほしくない、という思いで執筆しました。そのため、Androidアプリ開発の基礎的な考 え方やバージョンアップしても変わらない手法を解説しています。また、コードのパターンも解 説していますが、なぜそのようなパターンになるのかの理解を意識した解説を心がけました。一 方で、Androidアプリ開発の本質を解説するために、開発言語であるJavaそのものの基礎、たと えば、インターフェース、抽象クラス、継承、ネストクラスといった文法知識を前提とし、それ らの解説は最小限にとどめています。
もう1つ、本書で心がけたことがあります。それは、できるだけ手を動かしてアプリを開発して もらえるように、ということです。Androidアプリ開発に限らず、プログラミングを習得するに は書籍を読むだけでは不十分です。実際にコードを入力し、実行してこそ習得できるものであり、 入門者ならなおさらです。そこで、ほぼすべてのソースコードを掲載し、それらを実際に入力、 実行しながらアプリ開発を習得できるようにしました。
本書で習得したことを基礎力とし、より応用的なアプリ開発を自力で行うことへの第一歩とな れば、幸いです。
齊藤新三
本書の使い方
本書の特徴は、各章1~2本のアプリを実際に手を動かして学んでもらえるようにしていることです。 ほぼすべてのソースコードを掲載していますので、それらを入力し、実際にアプリを実行させて確認し てみてください。
学習の進め方
各章に手順と書かれた項がいくつかあります。
これが実際に手を動かしていただく項です。この順番通りに作業すると、実際にアプリを作成でき、 実行できるようになります。この手順は読み飛ばすのではなく、パソコンの前に座って実際に作業を 行ってください。
その後の項では手順項で作業した内容の解説が続きます。
また、本書では章を読み進めるごとに順に新しい技術が身につくようにしています。もちろんどこか の章だけを読むことも可能ですが、できるならはじめから順に読み進めるようにしてください。
サンプルプログラムについて
本書では、ほぼすべてのソースコードを誌面に掲載して いるので、基本的にはサンプルプログラムを別途ダウン ロードして確認する必要はありません。サンプルプログラムのファイルは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 Sierra (10.1.2)
・Android Studio 3.0.1
本書の表記
・紙面の都合でコードを折り返す場合、行末に口を付けています。
・Noteの囲みでは、注意事項や関連する項目、知っておくと便利な事柄などを紹介しています。
目次
はじめに
本書の使い方
第1章 Androidアプリ開発環境の作成
1.1 Androidのキソ知識
1.1.1 Androidの構造
1.1.2 Android Studio
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.1.4 Cannot resolve symbol ‘R’への対応
4.2 イベントリスナ
4.2.1 イベントとイベントハンドラとリスナ
4.2.2 Androidでリスナを設定する手順
4.2.3 手順 リスナクラスを作成する
4.2.4 リスナクラスは専用のインターフェースを実装する
4.2.5 手順 イベントハンドラメソッドに処理を記述する
4.2.6 Javaクラス内で画面部品を取得する処理
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 リストビュータップのリスナはOnitemClickListenerインターフェースを実装する
5.1.4 お手軽にメッセージを表示できるトースト
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では独特の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値とswitch文
第9章 フラグメント
9.1フラグメント
9.1.1 前章までのサンプルをタブレットで使うと
9.1.2 フラグメントによる画面構成
9.2 スマホサイズのメニューリスト画面のフラグメント化
9.2.1 手順 メニューリスト画面をフラグメントで実現する
9.2.2 フラグメントはアクティビティ同様にXMLとJavaクラス
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 データ取得処理
第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 暗黙的インテントの利用はアクションとURI
14.2 緯度と経度指定で地図アプリを起動するURL
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 リスナはインフレートした画面部品に対して設定する
索引