なんかサンプルばっか手打ちして、エラー出ては直してが飽きてきたので、この章では超簡単なアプリから実際に自分で作っていこうと思う。同時にちょっと復習する。
0.Androidアプリ
アプリケーションを構成する3要素
ソースコード(Java)
リソース(画像やサウンド、XML)
マニフェスト(XML)
ソースコード
アプリケーションの動作をJava言語で記述したファイルで、開発環境のsrcディレクトリに格納される。
アンドロイドのアプリ開発は
①アプリケーション・フレームワークが提供するJavaのクラスを拡張する
②各種イベントで呼び出されるJavaのメソッドに処理を記述する
の2つが基本となる。
イベントとはアプリケーションが起動したとき、画面上のボタンがタップされた時、モバイル機器が傾けられたとき、アプリケーションが終了するときなどを指す。
リソース
アプリケーションの飾り付けをするファイルのことで、resディレクトリに格納される。
アイコン、レイアウト、音楽、動画、文字情報を格納したファイルなどがある。
マニフェスト
アプリケーションの属性を定義するXMLファイルで、プロジェクト・ディレクトリの直下に格納される。
属性とは、アプリケーションのタイトルや利用するアイコン、バージョン番号、アプリケーションの起動時に画面を表示するクラス、などの情報。
アプリケーションに与える権限についてもこちらで宣言する。
Androidの理解に必須の4要素
Activity(アクティビティ)
Service(サービス)
Content Provider(コンテント・プロバイダ)
Intent(インテント)
Activity
アプリケーションの画面を構築する基本要素。
1つのActivityで1つの画面を構築し、画面操作に対する処理も記述する。
Activityを理解しておけば簡単なアプリケーションを作成できる。
画面を持つアプリケーションを開発する場合は、このActivityクラスから子クラスを派生させて、機能を拡張する。
下の図がActivityの状態遷移のパターン(ライフサイクル)である。
Service
画面を持たない処理を記述する要素で、画面を持たずに、ほかのアプリケーションの背後で動き続けるアプリケーションを実現するのに使用する。
Serviceはほかのアプリケーションを起動しても動き続けるので、処理が中断することもない。
Content Provider
アプリケーション間でデータを共有する仕組み。
アプリケーションが管理するデータはファイルや、Androidが内部に持つデータベース管理ソフト「SQLite」を使って保存できる。
データを利用する側のアプリケーションは、「query」や「insert」、「delete」といった特定のインタフェースを使ってデータを要求する。
利用可能なデータに対してだけ、それらの要求に応える。
Intent
これまでの3要素をつなげる仕組み。
アプリケーションの連携で重要となる。

Activityのメソッドを把握する。
onCreate
Activityクラスから派生させたクラスのインスタンスを生成し、画面を構築する際に呼び出されるメソッド。
画面のレイアウトを構築するなどの各種の初期化処理をこの中に記述する。
onStart/onRestart
Activityがユーザーの目に見えるようになった時に呼び出されるメソッド。
起動済みであるActivityが再び画面に現れる場合は、onRestartメソッドを経てonStartの処理が実行される。
onResume
Activityがユーザーとやり取りできるようになった状態に呼び出されるメソッド。
onPauseからも状態遷移する。
onPause
別のActivityが現在の画面にとって代わる際に呼び出されるメソッド。
onPauseの後、Androidのシステムは他のアプリケーションにメモリーを割り当てるためにそのActivityを終了させることがある。
編集中の文書といった消失しては困るデータはこのメソッドで永続化処理を行う。
onStop
Activityが完全にユーザーの目に見えなくなった際に呼び出されるメソッド。
その後、Activityが再び表示される場合はonRestartへと状態遷移する。
onDestory
Activityが完全に消失する際に呼び出されるメソッド。
Activity上にウィジェットを配置する。
ウィジェットはボタン、チェックボックス、テキストエリアなどの様々なものがあり、これらはJavaのクラスとして提供される。
ウィジェットはレイアウトクラスを使う。
1.プロジェクトの作成。
Eclipseを起動。ファイル-新規-その他。Android-Androidプロジェクト-次へ。プロジェクト名、ビルド・ターゲット、アプリケーション名、パッケージ名、Create Activity、Min SDK Versionを入力して完了。
| 項目 | 解説 |
| プロジェクト名 | 作成するプロジェクトの名前 |
| ビルド・ターゲット | 対象とするAndroidのVersion |
| アプリケーション名 | 実際に表示されるアプリケーション名 |
| パッケージ名 | ピリオドで区切った2組以上の文字列で、パッケージ名を指定する。 |
| Create Activity | アプリのアクティビティに付ける名前 |
| Min SDK Version | ビルド・ターゲットで選択したターゲットのAPIレベルに記載されている数字 |
プロジェクトの内容は
| src | プログラムのソースコードが格納される |
| gen | |
| assets | |
| res | アプリで使用する各種リソースが格納される |
| AndroidManifest.xml | アプリの基本情報を記述したXMLファイル |
resフォルダの内容は
| drawable-hdpi | アプリのアイコンやアプリで使用する画像が格納される(高精細度用の画像) |
| drawable-mdpi | アプリのアイコンやアプリで使用する画像が格納される(中精細度用の画像) |
| drawable-ldpi | アプリのアイコンやアプリで使用する画像が格納される(低精細度用の画像) |
| layout | アプリの画面レイアウトを記述したXMLファイルが格納される |
| values | 文字列や数値などのリソースを記述したXMLファイルが格納される |

2.レイアウトの編集
layoutフォルダにmain.xmlを編集していく。
レイアウトの編集画面は2つのタブがあり、Graphical Layoutタブではグラフィカルな編集画面、XMLファイル面のタブではXMLファイルのソースを直接編集するテキストエディタ画面が表示される。
プロパティー画面を表示する。
ウィンドウ-ビューの表示-その他。一般-プロパティー-OK。これで画面下のペインにプロパティータブが追加される。
同様にAndroid-LogCat、Devicesを選んで追加する。LogCatは、プロジェクトの実行中に端末から出力されるログを表示するツールで、デバッグの際に役立つ。Devicesを使用するとLogCatで表示するデバイスを選択できる。
不要なビューを削除。
LinearLayoutとTextViewが追加された状態になっている。
LinearLayoutは他のパーツを配置する土台となるレイアウトビューの1つで、プロパティーの設定により縦、横方向にViewを並べて配置できる。
TextViewには「Hello World,<アプリ名>」という文字列がセットされているが、不要なので削除する。
削除方法はビューを右クリックして削除。
レイアウトにビューを追加する。
レイアウト編集画面の左側にあるビューとレイアウトの一覧から、時計を表示するビューを追加する。
LinearLayoutはレイアウト上のほかの要素との位置関係を入れ替えることしかできないので1つだけの場合は変更できない。
ビューの表示位置を調整するには、レイアウト上またはアウトライン画面でビューを選択し、プロパティー画面で「Layout margin」に画面端からの位置を指定する。単位は「dp」を使用。
画面上端からの位置と左端からの位置を個別に指定したい場合は、それぞれ「Layout margin top」と「Layout margin left」で指定。
「Layout gravity」を使うと画面の中央や右端、下端に配置できる。
プロパティーで「Text size」で文字の大きさを変更、「Text color」で文字の色を、「Text style」で文字スタイル、「Typeface」でフォントの種類が変更できる。
プロジェクトを実行してアプリを起動する。
実行したいフォルダを右クリック-実行-Androidアプリケーション。
ツールバーの実行からでも起動できる。

3.背景画像の設定
背景画像を利用するには画像を作成する必要がある。
その際には必要以上に高い解像度の画像を使用したり、サイズの大きい画像を使うと、アプリのサイズが大きくなったり、縮小処理にCPUが無駄に使われることになる。
ここでは480×800と800×400の画像を作成して使用した。
画像が用意できたら、res/drawable-mdpiフォルダにドラッグしてファイルをコピーする。ファイル名は拡張子を含めて小文字のアルファベット、数字、アンダースコア、ドットのみが使用できる。
そのあとはLinearLayoutのプロパティーでBackgroundを選択して...ボタンをクリックして画像を選択すればOK。
画面の向きによって背景画像を切り替えるようにするにはres/drawable-land-mdpiフォルダに用意した横用の画像をコピーすればOK。ファイル名は縦用の画像と同じにする必要がある。
DigitalClockはプロパティーから大きさを変えることができるが、AnalogClockの大きさを変えるのは面倒である。文字盤と針の画像を用意してdrawable-mdpiに追加して、Dial、Hand hour、Hand minuteのプロパティーでそれぞれ指定する必要がある。また、正確な位置に描画しておかないと、時刻によって位置がずれてしまうので注意する。
画面をタッチすると画面が切り替わるようにする。
もう1つの画像を用意する。
画像のファイル名は前のものとは異なるようにし、同じフォルダへいれる。
LinearLayoutとTextViewにはIDがセットされないのでIDを追加する。
追加の方法はレイアウト編集画面でLinearLayoutを選択し、プロパティーでIdに@+id/layoutと入力する。
src/パッケージ名/アクティビティ.javaのファイルをダブルクリックするとソースコードを開ける。
あとはcounterを初期値1で設定して、クリックされたらcounterをみて1であれば背景とcounterを2に変えて、counterがそれ以外であれば背景とcounterを1に変える。画像の表示はクリックされる前から1が表示されているのでクリックされると2に変わることになる。下がプログラム例。

プログラムを追加したらレイアウト編集画面でlayoutを選択して、プロパティーのOn clickにonClickと入力すれば完成。下ができたアプリの例。
作ったアプリはデジタル時計と背景画像のシンプルなもので、画面をタッチすると木から星へ背景が変わるもの。端末を横にすると横用の画面に切り替わり、これも画面をタッチすると背景が切り替わる。



