付 録 Android,Android SDK,Eclipse のバージョン Android プログラミング Bible( 初 級 基 礎 編 中 級 Android 的 プログラミング 法 上 級 各 種 処 理 )は Eclipse 3.6 Helios Android 2.2(API 8) で 開 発 し 実 機 は SAMSUNG GALAXY S で 確 認 しました さらに 本 書 のプログラムは Eclipse 3.7 Indigo と Android 4.0.3(API 15) でも 確 認 し 差 異 があるものは その 差 異 について 本 文 の 該 当 箇 所 に 注 として 記 述 してあります 本 書 は Android SDK のバージョンは android-sdk_r16 です SDK バージョンが 異 な ると プロジェクト 名 の 入 力 方 法 デフォルトで 生 成 されるファイルなどが 異 なる 場 合 が あります また デフォルトの 背 景 色 も 異 なる 場 合 があります この 付 録 では Android 4.0 についてと 異 なる SDK バージョンでの 注 意 点 についてまと めてあります Android,Android ADT,Eclipse は 日 進 月 歩 の 速 さでバージョンが 改 訂 され ます 書 籍 の 中 ですべてのバージョンについて 記 述 することは 難 しいので 最 新 情 報 はカ サイ.ソフトウエアラボの 電 子 書 籍 サービスサイト(http://www.kasailab.jp)を 参 照 して ください 1.Android 4.0 とは Android は スマートフォン 向 けの Android 2.x タブレット 端 末 向 けの Android 3.x と 分 かれていましたが Android 4.0 は 2 つを 統 合 し スマートフォンやタブレット 端 末 それ 以 上 の 大 型 の 機 器 にまで 使 われる 予 定 の OS です 現 在 までの Android SDK バージョ ン API レベル コードネームの 関 係 を 以 下 の 表 にまとめます 本 書 のプログラムは Android 2.2 で 開 発 し Android 4.0.3 でも 動 作 を 確 認 しています Android 4.1/4.2 については 動 作 確 認 をしていません Android SDK バージョン API レベル コードネーム 4.2 17 Jelly Bean 4.1 16 Jelly Bean 4.0.3 15 Ice Cream Sandwich 4.0 14 Ice Cream Sandwich 3.2 13 Honeycomb 3.1 12 3.0 11 2.3.4(2.3.3) 10 Gingerbread 2.3 9 2.2 8 Froyo 2.1 7 Eclair
2.0.1 6 2.0 5 1.6 4 Donut 1.5 3 Cupcake 1.1 2 非 公 開 1.0 1 非 公 開 2. Android4.0 の 留 意 事 項 2-1 Menu キーの 扱 い 端 末 下 部 の Menu Home Back の 各 ハードキーが ディスプレー 上 に 表 示 されるソフトキーになりました Menu は 廃 止 され 代 わりに Recent Apps( 最 近 使 っ たアプリ) が 加 わりました さらに Back Home Recent Apps の 上 に 電 話 連 絡 先 アプリ メッセージ ブラウザ のアイコンが 画 面 に 表 示 されます Eclipse3.7 のエミュレータではハードキーで Home Menu Back が 以 前 と 同 様 にあります Home ボタンで 電 話 連 絡 先 アプリ メッセージ ブラウザ の アイコンが 画 面 に 表 示 されます
Android 4.0 では Menu キーが 廃 止 されましたので Menu キーを 扱 うプログラムは 変 更 が 必 要 になります 2-2 タイトルバーの 構 成 マニフェストの android:icon に 指 定 されたアイコンがタイトルバーの 左 端 に 表 示 されま す <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > 例 題 5-11-2 で 調 べたステータスバー タイトルバーの 高 さは 以 下 のようになります Eclipse 3.6+Android 2.2 エミュレータのステータスバー タイトルバーの 高 さ Eclipse 3.7+Android 4.0 エミュレータのステータスバー タイトルバーの 高 さ Android4.0 のタイトルに 表 示 できる 文 字 数 は Android2.2 より 少 なくなっています タイ トルバーのテキストサイズは 変 更 できませんので この 例 題 ではタイトルバーに 表 示 する 文 字 を 英 語 に 変 えて 文 字 数 を 減 らしました settitle("ステータスバー:"+sbar+",タイトルバー:"+tbar); settitle("status:"+sbar+",title:"+tbar); 2-3 ウイジェットの 形 状 ウイジェットの 形 状 が 一 部 変 更 されました 1.EditText Android 4.0 では EditText の 形 状 が 変 更 されました 入 力 ボックスは 四 角 のボックスでな く 下 端 枠 のみの 形 状 になりました 背 景 色 が 白 から 黒 テキスト 色 が 黒 から 白 に 変 更 さ
れました 2.Spinner Android 4.0 ではデフォルトでドロップダウン 形 式 (android:spinnermode="dropdown") となります ダイアログ 形 式 にするには android:spinnermode="dialog" とします 3.ProgressBar Android 4.0 での 形 状 は 水 平 バーの 幅 が 細 くなります
4.メニュー Android 4.0 ではメニュ 項 目 は 縦 に 配 置 され アイコンが 表 示 されません More 項 目 はなく 10 個 以 上 のメニュー 項 目 はスクロールして 表 示 されます 5.DatePicker 黒 背 景 ベースでカレンダーが 付 きます
6.TimePicker 黒 背 景 ベースになります 2-4 ソフトキー Android 4.0 では 端 末 にハードキーがある 場 合 は EditText にフォーカスが 移 ってもソフ トキーは 表 示 されません したがって Eclipse のエミュレータ(AVD のターゲットバージ ョンが 4.0 の 場 合 )ではソフトキーが 表 示 されません 2-5 日 本 語 入 力 Eclipse 3.7 エミュレータでデフォルトで 日 本 語 入 力 ができるようにするには Home 画 面 の を 選 択 し を 選 択 します 表 示 されたダイアログの Language&input を 選 択 し 以 下 の 2 つの 設 定 を 行 います 1 Language に 日 本 語 を 選 択 します これでエミュレータの 表 示 が 日 本 語 になりま す
2 デフォルト に Japanese IME を 選 択 します 注 EditText にフォーカスがあるときはエミュレータ 画 面 上 部 のプルダウンを 開 き 入 力 方 法 の 選 択 から 入 力 方 法 を 選 択 することもできます 注 上 記 の 設 定 で 日 本 語 入 力 にならない 場 合 は AVD を 再 度 起 動 しなおしてください
3.Android SDK のバージョン Android のバージョンと Android SDK のバージョンは 意 味 が 異 なります Android SDK のバージョンはダウンロードするファイル android-sdk_r -windows.zip の 部 分 です 本 書 は android-sdk_r16-windows.zip をダウンロードした 環 境 で 記 述 しています Eclipse と Android のバージョンが 同 じでも SDK バージョンが 異 なると プロジェク ト 名 の 入 力 方 法 デフォルトで 生 成 されるファイルなどが 異 なる 場 合 があります また デフォルトの 背 景 色 も 異 なる 場 合 があります SDK のバージョンが r16 以 後 での 注 意 点 を 以 下 に 説 明 します 3-1 プロジェクトの 作 り 方 1 ファイル - 新 規 - その 他 を 選 択 し Android - Android Application Project を 選 択 します この 部 分 は 基 本 的 には 同 じです
2 プロジェクト 名 等 の 入 力 アプリケーション 名 プロジェクト 名 パッケージ 名 ビルドターゲット 等 を 入 力 する 画 面 が 異 なります
3 アプリケーションアイコンの 設 定 使 用 するアプリケーションアイコン(ic_launcher.png)をカスタマイズできます 4 BlankActibity の 選 択 Activity の 生 成 で BlankActivity を 選 択 します 5 Activity Name,Layout Name の 入 力 デフォルトのアクティビティ 名 が アプリケーション 名 Activity から MainActivity
に 変 更 されました レイアウトファイル 名 が main.xml から activity_main.xml に 変 更 されました 6 生 成 されたコード MainActivity.java oncreateoptionsmenu メソッドが 追 加 されています package com.example.test1; import android.os.bundle; import android.app.activity; import android.view.menu; import android.view.menuitem; import android.support.v4.app.navutils; public class MainActivity extends Activity { @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main);
} } @Override public boolean oncreateoptionsmenu(menu menu) { getmenuinflater().inflate(r.menu.activity_main, menu); return true; } activity_main.xml デフォルトで 生 成 されるレイアウトが LinearLayout から RelativeLayout に 変 更 されまし た デフォルトの TextView の 表 示 位 置 が 画 面 中 央 になりました <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerhorizontal="true" android:layout_centervertical="true" android:padding="@dimen/padding_medium" android:text="@string/hello_world" tools:context=".mainactivity" /> </RelativeLayout> 7 実 行 結 果 画 面 は 背 景 が 白 で テキストの 表 示 色 が 黒 と 逆 になります
3-2 デフォルトのアイコンの 名 前 デフォルトのアイコンの 名 前 が icon.png から ic_launcher.png に 変 更 されました ic_launcher.png
アイコンの 内 容 も SDK のバージョンが 進 むたびに 変 化 しています ic_launcher.png ic_launcher.png 3-3 背 景 色 本 書 ではデフォルトの 背 景 色 として 黒 背 景 を 想 定 しています SDK 環 境 のバージョンによ ってデフォルトの 背 景 色 が 白 背 景 の 場 合 があります この 環 境 で 本 書 のプログラムを 実 行 した 場 合 に 一 部 のプログラムで 白 地 に 白 で 描 くことになります この 場 合 は 背 景 色 を 変 更 するか 表 示 色 を 変 更 してください 背 景 色 を 設 定 する 方 法 として 以 下 のような 方 法 があ ります 1. グラフィック 画 面 の 背 景 色 を 黒 に 設 定 する ondraw メソッドの 先 頭 で drawcolor メソッドを 使 って 背 景 色 を 黒 に 設 定 します 2 章 の 2-2 参 照 protected void ondraw(canvas canvas) { canvas.drawcolor(color.black); 2. レイアウトの 背 景 色 を 黒 に 設 定 する View クラスの background 属 性 を 使 って 背 景 色 を 黒 に 設 定 します 3 章 の 3-9 参 照 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#000000" android:orientation="vertical" > これに 伴 い 各 ウィジェット(TextView など)のテキスト 表 示 色 を android:textcolor= "#ffffff" のように 白 に 設 定 する 必 要 がある 場 合 もあります 3. テーマを 使 って 黒 に 設 定 する マニフェスト(AndroidManifest.xml)の theme 属 性 を 使 って 背 景 色 を 黒 に 設 定 します 4 章 4-7 参 照 <application android:theme="@android:style/theme.black" android:icon="@drawable/ic_launcher"
android:label="@string/app_name" > 3-4 XML 記 述 での 警 告 エラー XML の 記 述 で 警 告 エラーが 出 ます これは Android4.0 での 警 告 ではなく Android SDK および Eclipse の 警 告 です 1. 文 字 列 リソース 文 字 列 リソースを 使 わずに android:text="クリックしてね" のように 直 接 文 字 列 を 指 定 す ると 警 告 エラーとなります 警 告 を 回 避 するには string.xml に 以 下 のようにリソースを 定 義 し android:text="@string/msg" とします 2. EditText 以 下 の 属 性 を 指 定 しないと 警 告 エラーとなります android:inputtype="text" 指 定 できる 値 は 以 下 の 中 から 選 択 します 3. ImageView ImageButton 以 下 の 属 性 を 指 定 しないと 警 告 エラーとなります android:contentdescription="@string/msg"
4. <ImageView>と<TextView>を 子 に 持 つレイアウト( 例 題 3-10, 例 題 3-17-4, 中 級 Android 的 プログラミング 編 の 例 題 18-8, 例 題 18-9, 上 級 各 種 処 理 編 の 例 題 28-4) たとえば 以 下 は<LinearLayout>の 行 で This tag and its children can be replaced by one <TextView/> and a compound drawable という 警 告 エラーがでます <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center" > <ImageView android:src="@drawable/search" android:layout_height="wrap_content" android:layout_width="wrap_content" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="タッチして 喋 ってね" /> </LinearLayout> これは<ImageView>と<TextView>の 2 つを 使 わずに 以 下 のように<TextView>の 中 でイメ ージを 指 定 し <LinearLayout>の 子 要 素 を<TextView>ひとつにできるということです ただし イメージのサイズによっては 上 のコードと 下 のコードの 結 果 が 必 ずしも 一 致 する わけではありません <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center" > <TextView
android:layout_width="wrap_content" android:layout_height="wrap_content" android:drawabletop="@drawable/search" android:text="タッチして 喋 ってね" /> </LinearLayout> 注 中 級 Android 的 プログラミング 編 の 例 題 18-2 の 参 考 の 例 のように <ImageView> 自 体 を 使 いたい 場 合 は <TextView>に 含 めることはできませんので 警 告 は 無 視 します 5. <FrameLayout>と<merge>( 例 題 4-4-2, 例 題 5-3) たとえば 以 下 は<FrameLayout>の 行 で This <FrameLayout> can be replaced with a <merge> tag という 警 告 エラーが 出 ます <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ImageView android:layout_width="fill_parent" android:layout_height="fill_parent" android:scaletype="center" android:src="@drawable/photo1" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginbottom="20dp" android:layout_gravity="center_horizontal bottom" android:padding="12dp" android:background="#aa000000" android:textcolor="#ffffffff" android:text="ある 田 舎 の 情 景 " /> </FrameLayout>
<merge> はビューツリーのレベル 数 を 減 らすことにより Android レイアウトを 最 適 化 す る 目 的 で 作 成 されました 従 って 上 は 以 下 のように 書 き 直 すことができます <?xml version="1.0" encoding="utf-8"?> <merge xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ImageView android:layout_width="fill_parent" android:layout_height="fill_parent" android:scaletype="center" android:src="@drawable/photo1" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginbottom="20dp" android:layout_gravity="center_horizontal bottom" android:padding="12dp" android:background="#aa000000" android:textcolor="#ffffffff" android:text="ある 田 舎 の 情 景 " /> </merge> <merge> タグは Android レイアウトを 最 適 化 する 効 果 がありますが 以 下 の 制 約 があり ます <merge> は XML のルートタグとしてのみ 使 用 可 能 です <merge> ではじまるレイアウトをインフレートしたときは ViewGroup を 親 に 指 定 し attachtoroot を true に 設 定 しなければなりません Java には merge クラスはないので Java コードで FrameLayout layout=(framelayout)findviewbyid(r.id.main); のような 使 い 方 をする 場 面 では <merge>タグは 使 用 できません 6. Java コードで 子 要 素 を 追 加 する 場 合 ( 上 級 各 種 処 理 編 の 例 題 23-9-1, 例 題 24-2) 二 つのボタンを 横 配 置 にし Java コードで View 要 素 を 縦 に 追 加 するような 場 合 は 子 要 素 の<LinearLayout>の 行 で This LinearLayout layout or its LinearLayout parent is
useless という 警 告 エラーが 出 ます XML 記 述 の 中 だけでは Java コードで 子 要 素 が 追 加 されることは 分 かりませんので この 警 告 は 無 視 します <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/main" > <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text=" 四 角 " /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text=" 円 " /> </LinearLayout> </LinearLayout> LinearLayout layout=(linearlayout)findviewbyid(r.id.main); gv=new GView(this); layout.addview(gv); 7. <user-permissiion>の 位 置 Eclipse 3.6 の 古 いバージョンでは<user-permissiion>の 位 置 はどこでもよかったのです
が Eclipse 3.7 ではマニフェストの<user-permissiion>の 位 置 は<application>より 先 に 置 かないと 警 告 エラーとなります 4. Eclipse のバージョン Eclipse のバージョンとコードネームは 以 下 です コードネームの 先 頭 が 昇 順 に 並 ぶように 命 名 されています 本 書 のプログラムは Eclipse 3.6 で 開 発 し Eclipse3.7 でも 動 作 を 確 認 しています Eclipse 4.2 については 動 作 確 認 をしていません バージョン コードネーム 由 来 3.2 Callisto 木 星 の 第 4 衛 星 3.3 Europa 木 星 の 第 2 衛 星 3.4 Ganymede 木 星 の 第 3 衛 星 3.5 Galileo ガリレオ ガリレイ 3.6 Helios ギリシア 神 話 の 太 陽 神 3.7 Indigo 青 藍 の 染 料 4.2 Juno ローマ 神 話 の 女 性 と 結 婚 を 守 護 する 女 神