Androidプログラミング¶
Androidアプリケーション構造¶
Androidアプリケーションはフレームワークによって振る舞い・構造が制限されています。それは、主に小さなアプリケーションが互いに連携できる枠組みを用意しそれを活用して高度な機能を実現するためです。他のOSでは、Androidアプリケーションのようにあるアプリケーションの画面から別なアプリケーションの画面を呼び出し、戻ってくるということは簡単には実現できません。同じく、あるアプリケーションのデータストア(ファイル、データベース)アクセス機能を別なアプリケーションから利用することは簡単には実現できせん。Androidでは、画面間の連携、データストアへのアクセス機能の連携、サービスの連携などが簡単な仕組みで用意されています。
簡単な模式図を次に示します。Androidにおいて画面を制御するActivity、構造化データのCRUDを提供するContentProvider、独立した機能を実行するServiceといった構成要素があります。これらは、1つのアプリケーションの中に押し込めてもよいのですが、別なアプリケーションから利用することもできます。
+--- Application ----+ | +----------------+ | | | Activity | | | +----------------+ | | +----------------+ | | |ContentProvider | | | +----------------+ | | +----------------+ | | | Service | | | +----------------+ | +--------------------+ +-- Application A --+ +-- Application B --+ +-- Application C --+ | +---------+ | | +---------+ | | | | |Activity |<-------------------+Activity | | | | | +--+------+ | | +--+---+--+ | | | | | +-------------------------+ | | | | | +--V----V-+ | | +------------------->+----------+ | | |Content | | +-------------------+ | | Service | | | | Provider| | | +----------+ | | +---------+ | +-------------------+ | | +-------------------+
UI関連¶
アクティビティ¶
ActionBarActivityが非推奨(deprecated)¶
Android Studio 1.2では空のActivityを生成するとActionBarActivityを継承したクラスが生成されます。これはActivityの上にActionBarを表示するActivityです。しかし、Android 5.0でActionBarに替わりToolBarが導入され、以降はActionBarではなくToolBarを使うことが推奨となりました。ToolBarは他のviewと同じくレイアウトファイルに記述するので、配置を含めていろいろカスタマイズが可能です。
なお、古いAndroidでもsupport library v7(revision 21以降)にToolBarが含まれるのでToolBarを使うことができます。
フラグメント¶
便利なライブラリ¶
バインド・ライブラリ¶
レイアウトXMLに定義した部品とソースコード上の変数とを簡潔に対応付けるライブラリです。
標準Androidコード | バインド利用コード(ButterKnifeの例) |
TextView titleLabel = (TextView) findViewById(R.id.title_label_textview); |
@Bind(R.id.title_label_textview) TextView titleLabel; |
|
|
文字の大きさ¶
レイアウトでビュー個別に文字サイズを設定¶
- 文字の大きさを値で指定
レイアウトXMLファイルのビュー定義でtextSize属性に文字サイズを数値+単位で指定します。
<TextView android:textSize="20sp" ... />
文字サイズの単位は、次のような感じです。
- sp: システム全体の文字スケール(Small, Normal, Large, Extra Large)とフォントに応じて実際のピクセル値に変換される相対的な単位
- dp: 解像度(デバイスの物理的なピクセルの大きさ)によらず、同じ値を指定すれば異なる解像度のデバイスでも同じ大きさで表示される単位
※ DPI(1インチあたりの物理的ピクセル数)をミリミリ計算してるわけではなく、ldpi、mdpi、hdpi、xhdpiのようにDPIのある程度の幅でグループ化して大きさを調整しているので、実際にはデバイスにより多少の大きさのぶれは存在する - px: 解像度(デバイスの物理的なピクセルの大きさ)にもとづく単位
参考¶
永続化¶
SQLiteデータベース¶
Androidは標準でSQLiteを搭載し、アプリケーションフレームワークからSQLiteを利用することができます。
共通¶
リソース¶
Androidアプリケーションプログラムでは、各種定数(文字列、定数、色)をソースファイルにハードコードせずにリソースファイルに記述するスタイルを取っています。また、レイアウトで定義したView部品に付けたIDをソースコードから参照します。これらのリソースを参照するキーとしてリソース名を付けています。
res/valuesに定義するリソース¶
- 文字列
- 整数
- リソースXML
<integer name="max_size">1234</integer>
- Javaソース
int max = res.getInteger(R.integer.max_size);
- リソースXML
- 整数配列
- リソースXML
<integer-array name="numbers"> <item>1</item> <item>1</item> <item>2</item> </integer-array>
- Javaソース
int[] nums = res.getIntegerArray(R.array.numbers);
- リソースXML
ログ¶
Androidのサンプルを見るとほとんどすべてがandroid.util.log(通称LogCat)を使うものです。しかし、これはデバッグ主体で開発環境をつないだときに確認できます。運用時にファイルにログを残す仕組みはなかなかありませんが、java.util.loggingを使うことができるようです。
参考¶
ハードウェア情報¶
画面¶
画面サイズの取得¶
Activityクラス内で次のように取ります。
Point displaySize = new Point();
getWindowManager().getDefaultDisplay().getSize(displaySize);
Log.d("TEST", "Display size x=" + displaySize.x + ",y=" + displaySize.y);
規約¶
命名規約¶
- SQLiteデータベースファイル名(小文字スネークケース)
<アプリケーション名>.db を基本とする。複数のデータベースファイルを使うときは、<アプリケーション名>_<補足名>.dbとする。 - レイアウトのビューに付けるID(小文字スネークケース)
<機能名>_<ビュー部品名> を基本とする。(例: title_label_textview) - リソースのID(小文字スネークケース)
Activity固有のリソースであれば、<Activityレイアウトファイル名(.xmlを除く)>_<リソース名> を基本とする。
共通のリソースであれば、<リソース名> を基本とする。