Page Last

JavaでAndroidアプリ開発日記 2章

優先順位の決定。

普通のじゃんけん>勝ちのカウント+ご褒美画像>音>ご褒美フォルダの設置>動き>応援メッセージ

普通のじゃんけん

1.レイアウトを考える。

以下は画面のイメージ図


以下は画面とボタンをタップしたときの動作における簡単なフローチャート

2.じゃんけんの仕組みを考える。

3.Androidアプリに実装する。

背景を作成

背景を作成
画面サイズは480×800
通常版と勝ち、あいこ、負けの4種類を作成

レイアウトを作成

TextViewとButton、LinearLayoutを使用
ボタンの位置を下にしたかったがBottomが言うことを聞かずてこずった
しょうがないので上からmarginをとることでやりすごす

ボタンでの画面遷移

少してこずった上、Google先生のお力を借りて何とか選択画面への移行が成功。
同様に選択画面から勝負判定の画面へ移行しようと同じように設定したらエラー。
_| ̄|○

画面遷移でググってたらActivityとxmlを両方つくらなきゃいけないっぽい
けどなんかちがうんだよなー

いくつかAndroidアプリの開発サイトをサーフィンしていると画面遷移について取り上げているものがいくつか…
いくつか見比べていると人によってボタンのオンクリックリスナーの指定が異なるようである
自分にとって一番分かりやすい方法を選ぶのが大切だと見える
画面の遷移は複数のファイルを編集することが必要である

メイン画面のActivity
インテントのインスタンスを生成し、メイン画面のActivityのインスタンスとサブ画面のActivityのクラスを明示的に指定する
startActivityメソッドを使って、サブ画面のActivityを起動する

メイン画面のlayout
ボタンがクリックイベントを利用できるようにする

サブ画面のActivity
インテントのインスタンスを生成し、メイン画面のActivityのインスタンスとサブ画面のActivityのクラスを明示的に指定する
finish()を使って、Activityを終了する

サブ画面のlayout
ボタンがクリックイベントを利用できるようにする

AndroidManifest
忘れがちなのがAndroidManifestでメイン画面のActivityはすでに登録されているのだが、サブ画面のActivityは登録されていないので自分で登録する必要がある。

3画面のボタンでの画面遷移ができた

じゃんけんの画面遷移ができるようになったが、アプリの終了が分からない
finish()だと1つ前のアクティビティに戻ってしまう

他のじゃんけんアプリは終了できないもの、タイトル画面を経由して終了するもの、メニューボタンから終了するものがあるそうだ

乱数の利用

import java.util.Random;

Random r = new Random();
int n = r.nextInt(値);

で0から(値-1)までの乱数がnに格納されるっぽい
画面を増やして乱数を使おうと思ったら、画面を増やした時点でエラーが
何が悪いんだろ?
1つずつActivityを増やしていってエラーをチェックしていくと画面をタップすると次のActivityに進むように設定していたのにレイアウトファイルが
android:onClick="onClickButton"となってた(笑)
これならエラーが出ても文句は言えない

条件分岐

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がないと処理が次の行へ流れていく

画面の向きの固定

AndroidManifest.xml-アプリケーション-Application Nodes-各Activity-Attributes for (Activity)
Screen orientationをportrait(縦に固定)もしくはlandscape(横に固定)に
Config changesをkeyboardHiddenとorientationに

オプションメニュー

MENUボタンを押すとオプションメニューが表示される
オプションメニューはXMLファイルで定義できる
ActivityのonCreateOptionsMenuメソッドで動的に生成もできる

@Override
public boolean onCreateOptionsMenu(Menu menu){
	// メニューアイテムを追加する
	menu.add(Menu.NONE,MNU_PREF,Menu.NONE,"設定");
	return super.onCreateOptionsMenu(menu);
}

Menuクラスのaddメソッド

パラメータgroupId親のメニューのID、必要なければNONEを指定
itemIdメニューのID(あとで処理をするときに必要)
orderメニューの並び順、必要なければNONEを指定
titleメニューの表示名
戻り値MenuItem追加されたメニュー

onOptionsItemSelectedメソッドの実装例

アプリの終了

アプリの終了には複数のやり方がある

finish()

Activityを閉じる際の最良の終了方法である
アプリケーションの起動Activityで呼び出した場合はアプリケーションを終了する
バックボタンを押したときと同じ動きで1つのアクティビティを利用する場合のみ使える

moveTaskToBack(true)

アプリケーション全体を終了する際の推奨される終了方法
アプリケーションを中断状態にする
ホームボタンを押したときの動作と同じ動き

その他

AndroidManifest.xml で <activity android:noHistory="true">オプションを指定して finish() する
noHistory="true"を指定しておくとアクティビティのスタックがなくなる事を利用する方法です

分岐の増加

じゃんけんでこちらの手を出した後に、相手の手を表示できるようにした
つまり、ぐーを出した後に勝った場合と、ちょきを出した後に勝った場合を別のActivityにしたということ
いつものごとくエラーはないが、エミュレータでアプリが動作しないことに出くわす
AndroidManifestにActivityを追加し忘れていた(汗)

アイコンとラベルの作成

アプリケーションの配布のためにはアイコンの作成が重要
デフォルトでアイコンが存在しているがそのままではオリジナリティに欠けます

ラベル(アプリケーション名)の作成

プロジェクト作成のときにラベル名は決定されているが当初の名前を変更したいときがある
変更するときは
string.xml-app_nameのValueを変更するだけ

アイコンの作成

アイコンのサイズは3つあり、それぞれ状況によって公開されるサイズが違うので小さいものだと見にくくなってしまう
アイコンはdrawable-hdpi/mdpi/ldpiにそれぞれ格納する
アイコン名はiconとすると楽
その他の名前はAndroidManifest.xmlで定義すると使えるようになる
画像フォーマットはPNG、GIF、JPEGなどが使用可能

<application
	android:icon="@drawable/アイコン名"
	>
</application>
画面の精細度作成する画像のサイズアイコンの描画範囲正方形のアイコン
hdpi72×7260×6056×56
mdpi48×4840×4038×38
ldpi36×3630×3028×28

パッケージ名

プロジェクト作成時にパッケージ名を決めているが、アプリを公開する際にパッケージ名が他のアプリと同じになってしまうと、使用できなくなってしまう
推奨されているものとしては、会社のドメイン名を逆順に並べたものを使うこととされている
重複する可能性を低くするするには
最初のコンポーネント名にトップレベルドメイン名を避け、自分の名前の一部を区切って入れるなどがある
確実に行うにはJavaカンファレンスが提供しているパッケージ名登録サービスを利用すると良い

アプリケーションファイルの作成

Android Marketにアプリケーションを登録するには、デジタル署名されたアプリケーションファイル(apkファイル)を作成する必要がある

プロジェクト-Androidツール-Export Signed Application Package
Export Android Application-プロジェクトのプロジェクト名を確認-次へ
Create new keystore-ロケーションにapkファイルの保存場所と作成する電子証明書のファイル名-パスワードに設定するパスワード-確認に設定したパスワード-次へ
Key Creationにそれぞれ電子証明書の項目を入力する

項目名必須意味
エイリアス電子証明書のエイリアス名称
パスワード電子証明書のパスワード
確認電子証明書のパスワード
Validity(years)電子証明書の有効期限(25年以上)
First and Last Name電子証明書の作成者の名前
組織単位組織単位名
組織組織名
City or Locality都市または地域名
State or Province州名または地方名
Country Code(XX)国コード(日本ならjp)

Destination APK fileに保存先と作成するapkファイル名-完了

Androidマーケットの登録

Googleアカウントの作成

GoogleアカウントはGoogleサイトで作成が無料で可能
必要な項目は
メールアドレス(作成されるメールアドレス名、アカウントのログインにも使う)
パスワード(ログインに必要なパスワードの作成、8文字以上)
の2つ

Androidマーケットでの開発者登録

流れとしては
デベロッパープロフィールの作成
登録料の支払い(25㌦=2000円くらい)
Androidマーケットディベロッパー販売/配布契約書への同意

必要な項目は
デベロッパー名(開発者の名前)
メールアドレス(開発者のメールアドレス)
電話番号(開発者の連絡先、日本の場合090-1234-5678を例にすると、+81-90-1234-5678)
クレジットカード情報

アプリの公開

作成したアプリはAndroidマーケットで公開するだけでなく、端末で
設定-提供元不明のアプリ
にチェックを入れておけば、自分のサイトやブログなどで配布することが可能
アプリの実行ファイル(apkファイル)を作成しておくことが重要

デベロッパーサイトにログインして
アプリケーションをアップロード-アセットのアップロード
必要項目は
下書きアプリケーションファイル(apkファイル)
スクリーンショット(2個以上)
高解像度アプリケーションアイコン(512×512、PNGまたはJPEG、ランチャーアイコンとは別)
有料アプリの設定は初回登録時のみ設定でき、一度無料アプリに設定すると、それ以後有料アプリに変更することはできない
また、配信したアプリは削除できないので非公開にするしかない

配信アプリのアップデート

バージョン番号の管理

<manifest
	android:versionCode="2"
	android:versionName="1.1"
	>

versionCode属性の数値をカウントアップしておく
versonName属性については任意ではあるが、バージョンの名前になるので変更しておいた方が良い
コンパイル後にapkファイルを作成する
電子証明書の選択画面では
Use existing keystoreで作成済みの電子証明書を選択する
apkファイル名は以前作ったものと同じであるとエラーが出るので変更しておいた方が良い

タイトル、ボタンの変更

タイトル、ボタンの名前を変更
名前を変更する際にはstring.xmlを編集して変更するのが楽
そのためには各レイアウトで@stringを利用することが必要となってくる
また、名前を変更するとレイアウトが崩れるのでその調整も必要となってくる

表示文字列の設定

TextView 変数 = new TextView(this);
変数.setText("Hello");
setContentView(変数);
String str = "あいうえお";
String str1 = str.substring(2,3);
TextView 変数 = (TextView)findViewById(R.id.textViewのId);
textView.setText(str1);

TextViewクラスのオブジェクトに表示される文字列を設定する
TextViewクラスで用意されているsetTextメソッドを使う
setTextの1番目の引数には表示する文字列を指定する
2番目の引数には文字列のBufferTypeを設定する
BufferTypeにはandroid.widget.TextView.BufferTypeクラスで用意されている3つの定数から1つ指定する
BufferType.EDITABLE
BufferType.NORMAL
BufferType.SPANNABLE

変数

変数の宣言は以下のようにして行う
データ型 変数名;
複数の変数を同時に宣言することもカンマを使うことで可能
データ型 変数名,変数名;

変数の値の代入は以下のようにして行う
変数名 = 値;

データ型

整数型
byte8bit-128~127
short16bit-32768~32767
int32bit-2147483648~2147483647
long64bit-9223372036854775808~9223372036854775807
浮動小数点型
float32bit
double64bit
その他
char16bit
boolean1bittrue、false

文字列

Stringオブジェクトの生成方法
String オブジェクト名 = "文字列";
メモリ使用の関係上効率が良い
String オブジェクト名 = new String("文字列");
コンパイル時指定された文字列がメモリ領域内につくられるのに加え、new String()実行時にも同様な指定された文字列を含むインスタンスが作られる
これは余分なメモリ領域であり、Stringクラスに用意されている便利なコンストラクタを使用する場合を除き、new演算子を使用する必要はない

Activityで設定した文字列をTextViewで表示

単一のActivityではできた