ここではJavaでAndroidアプリを開発するうえで必要になったEclipseの使用方法などをメモっていく。
アプリケーションを構成する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の状態遷移のパターン(ライフサイクル)である。
別のActivityを呼び出すと、いったんその画面は裏に隠れて、呼び出された新しい画面が上に表示される。
意図的にプログラムで実装しない限り、複数の画面を同時に1つの画面に表示することはできない

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のクラスとして提供される。
ウィジェットはレイアウトクラスを使う。
Service
画面を持たない処理を記述する要素で、画面を持たずに、ほかのアプリケーションの背後で動き続けるアプリケーションを実現するのに使用する。
Serviceはほかのアプリケーションを起動しても動き続けるので、処理が中断することもない。
Content Provider
アプリケーション間でデータを共有する仕組み。
アプリケーションが管理するデータはファイルや、Androidが内部に持つデータベース管理ソフト「SQLite」を使って保存できる。
データを利用する側のアプリケーションは、「query」や「insert」、「delete」といった特定のインタフェースを使ってデータを要求する。
利用可能なデータに対してだけ、それらの要求に応える。
Intent
これまでの3要素をつなげる仕組み。
アプリケーションの連携で重要となる。
プロジェクト
プロジェクトの内容は
| src | プログラムのソースコードが格納される |
| gen | |
| assets | |
| res | アプリで使用する各種リソースが格納される |
| AndroidManifest.xml | アプリの基本情報を記述したXMLファイル |
各フォルダとファイル
resフォルダの内容は
| drawable-hdpi | アプリのアイコンやアプリで使用する画像が格納される(高精細度用の画像) |
| drawable-mdpi | アプリのアイコンやアプリで使用する画像が格納される(中精細度用の画像) |
| drawable-ldpi | アプリのアイコンやアプリで使用する画像が格納される(低精細度用の画像) |
| layout | アプリの画面レイアウトを記述したXMLファイルが格納される |
| values | 文字列や数値などのリソースを記述したXMLファイルが格納される |
リソース種類と定義場所、参照方法
| 名前 | 役割 | 参照方法(XML) | 参照方法(Java) |
| res/anim/xxx.xml | アニメーションを定義 | @anim/xxx | R.anim.xxx |
| res/layout/xxx.xml | レイアウトを定義 | @layout/xxx | R.drawable.xxx |
| res/values/arrays.xml | 配列を定義 | R.array.xxx | |
| res/values/attrs.xml | カスタムレイアウトを定義 | R.styleable.xxx | |
| res/values/colors.xml | 色を定義 | @color/xxx @drawable/xxx | R.color R.drawable |
| res/values/dimens.xml | 寸法を定義 | @dimen/xxx | R.dimen.xxx |
| res/values/ids.xml | IDを定義 | @id/xxx | R.id.xxx |
| res/values/strings.xml | 文字列を定義 | @string/xxx | R.string.xxx |
| res/values/styles.xml | スタイルを定義 | @style/xxx | R.style.xxx |
参考サイト日本アンドロイドの会
ビュー
画面設計は、最初に紙とペンを用意して画面のラフスケッチを作成する。
まず、Viewをどのように配置するのかをイメージする。
次に、どのようなViewを配置すればラフ図のような画面を作れるのかを考える。
決まったらラフ図にViewの名前を書き込む。
そして、ラフ図を使って構成するViewやLayoutの洗い出しができたら、これをもとにレイアウトファイルに落とし込んでいく。
LayoutとViewの関係をツリー形式の図にすると分かりやすい。この構成図を書いてから作業すると、レイアウトファイルの編集で迷わずに済む。
レイアウトは複雑になればなるほど、計算処理に時間がかかり、バッテリー消費が大きくなるので最適なレイアウトを作成することが大切である。
グラフィカルな編集画面ならドラッグで、XMLファイルならタグを追加することで可能
Viewの編集はプロパティー画面からできる
Form Widgets
| 名称 | 説明 |
| TextView | 文字列の表示 |
| Button | 基本的なボタン |
| CheckBox | チェックボックス |
| ToggleButton | |
| RadioButton | ラジオボタン |
| CheckedTextView | |
| Spinner | スピナー |
| EditText | 編集可能なテキストボックス |
| AutoCompleteTextView | |
| MultiAutoCompleteTextView | |
| ProgressBar | 進行状況をバー等で示す |
| QuickContactBadge | |
| RadioGroup | |
| RatingBar | 評価を★で示す |
| SeekBar | シークバー |
Widgetにおける主な属性
| 属性 | 概要 |
| capitalize | テキストの一部、全てを大文字に変更する |
| ellipsize | テキストが表示領域からはみ出す場合に、省略する記号を設定する |
| gravity | テキストの配置方法を指定する |
| hint | 未入力の場合に文字入力を促すためのヒントを表示 |
| id | idを設定 |
| layout_weight | 水平方向における他のViewとの比率 |
| lines | 行数の設定 |
| text | 表示するテキストの設定 |
| textColor | テキストの色 |
| textSize | テキストのサイズ |
| textStyle | テキストのスタイル |
| typeface | テキストの書体 |
レイアウト
| 名称 | 説明 |
| LinearLayout | 縦または横に順番に配置可能なレイアウト |
| RelativeLayout | 他のViewに対して相対的に位置を指定するLayout |
| FrameLayout | 複数のViewやLayoutを重ね合わせて配置可能なLayout |
| TableLayout | 表のように配置するレイアウト |
| TableRow |
レイアウトにおける主な属性
fill_parentやmatch_parentとすれば、親Viewの大きさを元に縦または横に画面いっぱいまで引き延ばす
wrap_contentとすれば、内容に応じて可変の長さで引き延びる
idにおける主な属性
| 属性 | 概要 |
| @id | @id/nameはID:nameを指定している |
| @+id | @+id/nameで宣言されたIDを/gen/パッケージ名/R.javaにあるプライベートクラスidに追加する |
| @string | @string/nameは/res/values/strings.xmlに定義されている文字列を指定する |
コンポジット
| 名称 | 説明 |
| ListView | |
| ExpandableListView | |
| TwoLineListItem | |
| GridView | |
| ScrollView | |
| HorizontalScrollView | |
| SearchView | |
| SlidingDrawer | |
| TabHost | |
| TabWidget | |
| WebView |
Images & Media
| 名称 | 説明 |
| ImageView | |
| ImageButton | |
| Gallery | |
| MediaController | |
| VideoView |
Time & Date
| 名称 | 説明 |
| TimePicker | |
| DatePicker | |
| CalendarView | |
| Chronometer | |
| AnalogClock | アナログ時計 |
| DigitalClock | デジタル時計 |
遷移
| 名称 | 説明 |
| ImageSwitcher | イメージの切り替え |
| AdapterViewFlipper | |
| StackView | |
| TextSwitcher | |
| ViewAnimator | |
| ViewFlipper | 指をスライドさせるとViewを切り替えることができる |
| ViewSwitcher |
拡張
| 名称 | 説明 |
| View | |
| ViewStub | |
| GestureOverlayView | |
| SurfaceView | |
| NumberPicker | |
| ZoomButton | |
| ZoomControls | |
| DialerFilter | |
| AbsoluteLayout |
Java
コメントアウト
書いてあるプログラムを実行しない
//
その行のプログラムを実行しない
/* */
囲まれているプログラムを実行しない
演算子
| == | 左辺と右辺が等しい |
| < | 左辺が右辺よりも大きい |
| > | 左辺が右辺よりも小さい |
| <= | 左辺が右辺以上 |
| >= | 左辺が右辺以下 |
| != | 左辺と右辺が等しくない |
| ! | ブール値の先頭につけることで、true/falseを反転する |
cf.ブール値はtrueかfalseということ
型
| 種別 | 型 | 説明 |
| 論理値 | boolean | 真偽値、trueまたはfalse |
| 文字 | char | 1文字 |
| 整数 | byte | 1バイト符号付き整数 |
| short | 2バイト符号付き整数 | |
| int | 4バイト符号付き整数 | |
| long | 8バイト符号付き整数 | |
| 浮動小数 | float | 4バイト浮動小数点数 |
| double | 8バイト浮動小数点数 | |
| その他 | void | 値を返さない |
条件分岐
if (条件式) {
処理1
}else{
処理2
}
条件式が真の場合は処理1に、偽の場合は処理2を実行
if (条件式1) {
処理1
}else if (条件式2) {
処理2
}else{
処理3
}
複数の条件を設定して処理の流れを細かくすることもできる
switch (式) {
case 値1:
処理1
break;
case 値2:
処理2
break;
default:
処理3
}
式の値がcaseで指定した値(整数)に一致する場合には、その値に対応するcaseに行き、その処理が実行される
式の結果と一致する値がない場合はdefaultにいき、処理3が実行される
break文はswith文を抜け出すという命令で、breakがないと処理が次の行へ流れていく
カスタムフォーマット
| メソッド | 説明 |
| DecimalFormat() | デフォルトのパターンを使用して生成 |
| DecimalFormat(String) | 指定されたパターンを使用して生成 |
| DecimalFormat(String,DecimalFormatSymbols) | 指定されたパターンと引数の記号を使用して生成 |
| パターン | 説明 |
| # | 数字を表す。値が0の場合はその値は表示されません |
| 0 | 数字を表す。値が0の場合はその値には0が表示されます |
| . | 整数値と小数値の区切りを表す |
| , | 数データのグループセパレータを表します。 |
| % | 数データを100倍し、%を付与します。 |
| ' | フォーマット処理時にフォーマットパターンと捉えられたくないパターン記号を'で囲む |
| \u00A5 | 通貨記号を表す |
オブジェクト
| 文字 | string | 複数の文字列 |
文字列から数値型へ
数値から文字列へ
int型→String s1 = String.value0f(invalue)
System.out.println
System.out.println("Hello World!!");
文字列の表示
表示はLogcatにされる
@Override
メソッドの前に「@Override」と記述することで、プログラムのミスによりオーバライドが成立していない場合には、コンパイラが通知してくれます。また、そのメソッドの作成者以外がプログラムを見たときに、それがオーバライドであることが一目瞭然、というメリットもあります
findViewById
Viewに対して割り当てられたIdから対応するViewオブジェクトを取得する
以下使用例
Button button = (Button)findViewById(R.id.button1);
my_buttonのViewオブジェクトを取得する
ViewはButtonクラスのオブジェクトであるのでButtonクラスでキャストしている
setBackgroundResource
レイアウトの背景画像の設定を新たにセットし直す
以下使用例
layout.setBackgroundResource(R.drawable.img1);
背景にimg1をセットする
setContentView
アクティビティにViewを追加する
以下使用例
setContentView(R.layout.test1);
test1に移動
setOnClickListener
btn.setOnClickListener(this)
対象となるボタンがイベントを受け取れるように設定する
このとき因数にはインターフェイスを実装したクラスのオブジェクトを指定するが、自分自身のクラスでOnClickListnerインターフェイスを実装する場合はthisを指定する
btnはボタンの引数名
putExtra
it.putExtra("text",str)
第1引数はキー名、第2引数は渡したい値を設定する
setText
it.setText("Hello")
第1引数は表示文字列、第2引数はバッファータイプを設定する
バッファータイプには3つの定数から選ぶ
BufferType.EDITABLE
BufferType.NORMAL
BufferType.SPANNABLE
length
文字列.length()
文字列長を返します。Netscapeでは日本語など2バイトコード文字は全角1文字を2文字として数えます。Explorer 3.01では全角1文字は1文字として数えますので注意が必要
indexOf
検索される文字.indexOf(検索文字,検索開始位置)
指定した文字列を検索します。検索方向は左側から右側に向かって検索されます。該当する文字列がなかった場合は-1になります。文字が見つかった場合は文字の先頭位置を返します
substring
文字列.substring(抜き出す先頭位置,抜き出す終了位置)
指定範囲の文字列を抜き出す。先頭の文字が0番目となる事に注意して下さい。指定範囲が文字列数よりも多い場合は一番近い値で文字列を抜き出します。日本語など2バイトコード文字が含まれている場合、Netscapeでは正常に処理されませんが、Explorer 3.0では正しく処理されます
replaceAll
文字列.replaceAll(検索文字,置換文字)
文字列に対して指定したパターンに一致する部分を全て他の文字で置き換える
