Page Last

ここでは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/xxxR.anim.xxx
res/layout/xxx.xmlレイアウトを定義@layout/xxxR.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/xxxR.dimen.xxx
res/values/ids.xmlIDを定義@id/xxxR.id.xxx
res/values/strings.xml文字列を定義@string/xxxR.string.xxx
res/values/styles.xmlスタイルを定義@style/xxxR.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未入力の場合に文字入力を促すためのヒントを表示
ididを設定
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
文字char1文字
整数byte1バイト符号付き整数
short2バイト符号付き整数
int4バイト符号付き整数
long8バイト符号付き整数
浮動小数float4バイト浮動小数点数
double8バイト浮動小数点数
その他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通貨記号を表す

BigDecimalの参考サイト

オブジェクト

文字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(検索文字,置換文字)

文字列に対して指定したパターンに一致する部分を全て他の文字で置き換える