言語コード

Posted by muchag | Language | 2011-01-24 (月) 14:22:16

Web サイトやアプリケーションを作成する際
できるだけ多言語対応をできるようにしたい。

そのとき、言語毎に設定ファイルなどを作成する必要があるが
そのときに用いる言語コード、たとえば

  • en – English
  • ja – Japanese
  • zh – Chinese

これらには ISO 639 という国際規格が存在する。
3文字編と2文字編がある。

問題は、中国語でよく見る第2属性付きのもの。

  • zh-cn – 中国語:簡体字
  • zh-tw – 中国語:繁体字
  • zh-hk – 中国語:香港

これについてはまた調べなきゃ。

Language | 2011-01-24 (月) 14:22:16 |

アプリの多言語対応

Posted by muchag | Android | 2011-01-24 (月) 13:58:54

Android アプリは、Android Market を通じて世界中に簡単に配布できる。

せっかくならより多くの人に利用してもらうべく
多言語対応にできるといいね。

方法は、リソース(画像と文字列)を対応したい言語分用意するだけ。
もちろん、画像は全世界共通! ということであれば文字列だけでよい。

ディレクトリ構成

デフォルトのフォルダ構成は左図の通り。
(android-sdk_r08-windows)

中身の画像ファイルは自分で用意。

これは、Android 端末で
英語を利用している場合
特に言語設定をしていない場合
または、当該言語用フォルダがない場合
に用いられるフォルダ。

画像用:drawable-hdpi, drawable-ldpi, drawable-mdpi
文字列用:values
 
そこで
res フォルダのコンテキストメニューから
[新規]-[フォルダー]
または res フォルダを選択した後で
[ファイル]-[新規]-[フォルダー]
を選択して
出てきたダイアログにフォルダ名を設定し
新たに言語用フォルダを作成。

画像用:drawable-ja-hdpi, drawable-ja-ldpi, drawable-ja-mdpi
文字列用:values-ja
言語コード
 
ひとまずは、これらのフォルダの中に
元祖フォルダからそれぞれファイルをコピーする。

画像については、これだけやっておけば
作成した画像をそれぞれのフォルダに配置し
読み込み箇所を任意に指定するだけで
アプリ側が自動的に読み込んでくれる。
 

文字列の準備

文字列に関しても読み込みは自動だが
文字列は自動では入力してくれない。(当たり前だ

values/string.xml
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <resources>
  3.     <string name="app_name">HelloWorld</string>
  4.     <string name="hello">Hello World, HelloWorld!</string>
  5.     <string name="文字列定数名">文字列</string>
  6. </resources>

と設定しておく。
 

配置の指定
XML

XML ファイルで記述する場合。

AndroidManifest.xml
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3.      package="com.example.emergencyhealth"
  4.      android:versionCode="1"
  5.      android:versionName="1.0">
  6.     <application android:icon="@drawable/icon" android:label="@string/app_name">
  7.     </application>
  8. </manifest>

6行目

android:icon=”@drawable/icon”

android:icon 属性に先ほど用意していたアイコン画像のファイル名を
拡張子なしで記述。
 

android:label=”@string/app_name”

android:label 属性に文字列を設定。
 

hoge.xml
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3.    android:orientation="vertical"
  4.    android:layout_width="fill_parent"
  5.    android:layout_height="fill_parent"
  6.    >
  7. <TextView  
  8.    android:layout_width="fill_parent"
  9.    android:layout_height="wrap_content"
  10.    android:text="@string/hello"
  11.    />
  12. </LinearLayout>

 
10行目

android:text=”@string/hello”

TextView の android:text 属性に文字列を設定。

Android | 2011-01-24 (月) 13:58:54 |

ID カラムのお約束

Posted by muchag | Android,SQLite | 2011-01-23 (日) 22:33:04

AndroidSQLite を利用する際
ID カラムのネーミングにはお約束があるようだ。

AndroidのSQLite関係のクラスでは、このIDを示す「_id」カラムがあるという前提で実装されているクラスがあります。

引用元:mucchinのAndroid戦記 Androidアプリで使用するSQLiteのテーブル作成時の注意点

 
というわけで、Android で SQLite を利用するときの ID カラムは
_id
と名づけるべし!
 

  1. create table hoge (_id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, height REAL)
Android,SQLite | 2011-01-23 (日) 22:33:04 |

データ型

Posted by muchag | SQLite | 2011-01-23 (日) 22:09:57

SQLite では、カラムのデータ型は指定しなくていいらしい。
なんてアバウトな・・・。

  1. create table hoge (id, name, height)

 

カラムのデータ型指定(アフィニティ)

でもまぁ、もちろん指定してもいいわけで
その際に使えるのは以下の5種類。

  • TEXT
  • NUMERIC
  • INTEGER
  • REAL
  • NONE

 

  1. create table hoge (id INTEGER, name TEXT, height REAL)

なんていう風に記述。

あ、大文字小文字の区別はないっぽい。
 

PRIMARY KEY

このとき

  1. create table hoge (id INTEGER PRIMARY KEY, name TEXT, height REAL)

としてやると、id カラムへは 自動で ID 番号を追加 してくれる機能が付加される。

ただし、この場合の追加規則は ID 番号最大値 + 1 なので、
最終レコードを削除した後に新しいレコードを挿入すると
先ほど削除した ID 番号が追加 される。

参考元:DBOnline.JP INTEGER PRIMARY KEYが設定されたカラム
 

AUTOINCREMENT

同じ番号を2度と使いたくない場合は、以下のように記述すること。

  1. create table hoge (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, height REAL)

参考元:DBOnline.JP AUTOINCREMENT
 

値のデータ型分類(ストレージクラス)

さて、ここからが今一よくわからない。

ストレージクラス とは、SQLite がそれぞれのデータをどう捉えるか、というものらしい。
上記のカラムのデータ型とは異なるらしい。。。
意味がよく分からない。。。そのうち。。。 🙄

その ストレージクラス とは、以下の5種類。

  • NULL – NULL値
  • INTEGER – 符号付整数。1, 2, 3, 4, 6, or 8 バイトで格納
  • REAL – 浮動小数点数。8バイトで格納
  • TEXT – テキスト。UTF-8, UTF-16BE or UTF-16-LEのいずれかで格納
  • BLOB – Binary Large OBject。入力データをそのまま格納

<参考引用元サイト>
DBOnline.JP:SQLiteで利用可能なデータ型
Third impact:SQLite Version 3 におけるデータ型

SQLite | 2011-01-23 (日) 22:09:57 |

SQLite の中身を見る

Posted by muchag | Android | 2011-01-23 (日) 18:52:25

SQLite の操作をしていると
中身を見たくなることがよくある。

GUI で見る手法

これは素敵♪

ツールの入手

SQLite を GUI で見るには、そのためのツールを利用する。
今回は SQLite Database Browser というのを利用することにした。
2011-01-23 現在、sqlitebrowser_200_b1_win.zip 。

DL した圧縮ファイルを解凍すると、フォルダの中に

SQLite Database Browser 2.0 b1.exe

というような実行ファイルがあるので、それから実行する。
 

DB ファイルの入手

Android エミュレータ環境において、実際の SQLite ファイルの場所を探し回ったが
「/data/data/(パッケージ名)/databases/」というパスばっかり載っていて
具体的な保存場所の情報を見つけることはできなかった。

そんなときに素敵な記事を発見!
そふとうぇあ関係メインのブログ:SQLiteの中身をGUIで見る方法

[ウィンドウ]-[ビューの表示]-[その他] から

 
出てきたダイアログの
「Android」を開き
「ファイル・エクスプローラ」を選択して
「OK」。

DDMS パースペクティブ には
最初から ファイル・エクスプローラ ビュー がある。

 
「data」
「data」
「パッケージ名」
「databases」と開き
「データベース名」を選択。

右上の「Pull a file from the device」ボタンをクリック。

任意の場所へ DB ファイルを保存。

 

DB を開く

SQLite Database Browser から件の DB ファイルを開けば無事に中身を見られる。
 

コマンド プロンプト を利用する手法

①「adb shell」
(環境変数パスを通していない場合は、SDK フォルダまで移動して実行)

②「cd data/data/(パッケージ名)/databases」

③「sqlite3 (データベース名).db」

④「.tables」でテーブル一覧を見られる。

その他、「.help」を実行することでコマンド一覧を見られる。
 

adb.exe の場所が・・・

この手法はあちこちのサイトで紹介されていたが
私の環境(android-sdk_r08-windows、但し、installer_r08-windows.exe にてインストール)では、
ちょっとメンドイことになっていた。

Android SDK 付属のツールに adb.exe というのがある。

これが、みなさんの場合は

android-sdk-windows\tools

にあるようなのだが、私の場合は

android-sdk-windows\platform-tools

にあるのだ。

しかも SQLite をいじるためのツール sqlite3.exe

android-sdk-windows\tools

にあるのだ。

これだと 開発環境の整備 で、パスを通した意味がなーい!

と叫んでも仕方がないので adb.exe と AdbWinApi.dll を

android-sdk-windows\tools

へコピーして使うことにした。

参考元:そふとうぇあ関係メインのブログ AndroidのSQLiteを操作する(コマンドプロンプト)

Android | 2011-01-23 (日) 18:52:25 |

コンテンツ プロバイダ

Posted by muchag | Android | 2011-01-23 (日) 12:58:07

コンテンツ プロバイダ は、アプリケーション内外を問わず
データを公開するためのコンポーネント。

この場合のデータとは、ファイル システムや SQLite データベースなどを指す。

コンテンツ プロバイダは、
アプリケーションのデータを他のアプリケーションでも利用できるようにします。

データは、ファイル システムや SQLite データベースなど、
一般に利用できる方法で格納されていれば使用できます。

コンテンツ プロバイダは、ContentProvider 基本クラスの拡張です。

プロバイダが制御する型のデータを、
他のアプリケーションから取得および格納するための標準メソッド セットを実装しています。

ただし、これらのメソッドをアプリケーションから直接呼び出すことはできません。

代わりに、ContentResolver オブジェクトのメソッドを呼び出します。

ContentResolver は、すべてのプロバイダと通信でき、
プロバイダと連携して関係のあるすべてのプロセス間通信を管理します。

Android Developers:開発の基礎

 

新規作成
クラスファイルの作成

コンテンツ プロバイダ コンポーネントを作成するために
新しいクラスファイルを作成するとき
左図のように「スーパークラス」に
「android.content.ContentProvider」と入力しておけば
コンテンツ プロバイダ 用のクラスファイルを自動生成してくれる。

自動生成されたコード。

  1. package com.example.hoge;
  2.  
  3. import android.content.ContentProvider;
  4. import android.content.ContentValues;
  5. import android.database.Cursor;
  6. import android.net.Uri;
  7.  
  8. public class Sample extends ContentProvider {
  9.  
  10.     @Override
  11.     public int delete(Uri uri, String selection, String[] selectionArgs) {
  12.         // TODO 自動生成されたメソッド・スタブ
  13.         return 0;
  14.     }
  15.  
  16.     @Override
  17.     public String getType(Uri uri) {
  18.         // TODO 自動生成されたメソッド・スタブ
  19.         return null;
  20.     }
  21.  
  22.     @Override
  23.     public Uri insert(Uri uri, ContentValues values) {
  24.         // TODO 自動生成されたメソッド・スタブ
  25.         return null;
  26.     }
  27.  
  28.     @Override
  29.     public boolean onCreate() {
  30.         // TODO 自動生成されたメソッド・スタブ
  31.         return false;
  32.     }
  33.  
  34.     @Override
  35.     public Cursor query(Uri uri, String[] projection, String selection,
  36.             String[] selectionArgs, String sortOrder) {
  37.         // TODO 自動生成されたメソッド・スタブ
  38.         return null;
  39.     }
  40.  
  41.     @Override
  42.     public int update(Uri uri, ContentValues values, String selection,
  43.             String[] selectionArgs) {
  44.         // TODO 自動生成されたメソッド・スタブ
  45.         return 0;
  46.     }
  47. }

 

Androidmanifest.xml への登録

Androidmanifest.xml を開いて、以下を追加。

  1. <provider android:name="Sample"
  2.         android:authorities="com.example.hoge.sample" />

android:name 属性にはクラス名。
android:authorities 属性には コンテンツ プロバイダ 名。

コンテンツ プロバイダ 名は通常、重複を避けるために
パッケージ名 + クラス名 とするようだ。

 

URI

データのありかを示すアドレス。

アプリケーションがデータにアクセスするときは、上記 コンテンツ プロバイダ 名を用いて
content:// コンテンツ プロバイダ 名 /
というアドレスでアクセスする。

Android | 2011-01-23 (日) 12:58:07 |

Color

Posted by muchag | Android | 2011-01-23 (日) 1:20:11

文字通り色の指定をできるクラス。

Android Developers:Color

色の指定方法は2通りあって、定数を用いる手法とメソッドを用いる手法。

定数
  1. layout.setBackgroundColor(Color.BLACK);
  • BLACK
  • BLUE
  • CYAN
  • DKGRAY
  • GRAY
  • GREEN
  • LTGRAY
  • MAGENTA
  • RED
  • TRANSPARENT
  • WHITE
  • YELLOW

の12通り。
 

メソッド
RGB系
rgb(int red, int green, int blue)

red, green, blue には、0~255 の数値を代入。

  1. layout.setBackgroundColor(Color.rgb(255, 255, 255));

 

argb(int alpha, int red, int green, int blue)

alpha 値(透明度)も含めた指定。
alpha, red, green, blue には、0~255 の数値を代入。

  1. layout.setBackgroundColor(Color.argb(255, 255, 255, 255));

 

alpha(int color)
red(int color)
green(int color)
blue(int color)

上記のうち1つだけを指定するもの?
 

parseColor(String colorString)

RGB(またはARGB)を16進数あるいは文字列で指定するタイプ。

  1. layout.setBackgroundColor(Color.parseColor("#66ccff"));

“#RRGGBB”
“#AARRGGBB”
“red”, “blue”, “green”, “black”, “white”, “gray”, “cyan”, “magenta”, “yellow”, “lightgray”, “darkgray”
以上を指定可能。
 

HSV系
HSVToColor(float[] hsv)
HSVToColor(int alpha, float[] hsv)
RGBToHSV(int red, int green, int blue, float[] hsv)
colorToHSV(int color, float[] hsv)

そもそも HSV の意味が分からないので意味不明。
そこでグーグル先生に聞いてみると素敵な記事がヒット!

Mobile Dev. (Android + Java):ColorクラスのcolorToHSVやRGBToHSVの使い方

いつか勉強します・・・はい・・・。 🙄

Android | 2011-01-23 (日) 1:20:11 |

setMargins と setPadding の違い

Posted by muchag | Android,困ったTT | 2011-01-22 (土) 17:21:38

setMarginssetPadding の違いは何だろう・・・と思った。

setMargins

ViewGroup.MarginLayoutParams クラスのメソッド。
Android Developers:setMargins

具体的には、以下のサブクラスにて利用。

  • FrameLayout.LayoutParams
  • LinearLayout.LayoutParams
  • RelativeLayout.LayoutParams
  • RadioGroup.LayoutParams
  • TableLayout.LayoutParams
  • TableRow.LayoutParams

具体的な利用法は setMargins 参照。

setPadding

View クラスのメソッド。
Android Developers:setPadding

具体的には Button などの各サブクラスで利用。

差異

で、結局違いは?

LinearLayout などのレイアウトものは setMargins で
レイアウトものの中に配置する View ものは setPadding かと思ったんだけど
あちこちのサイトを見ていると、どうもそうでもないらしい。

実際に私のテスト環境で

  1. LinearLayout layout=new LinearLayout(this);
  2. layout.setPadding(0, 400, 0, 0);

これがちゃんと機能しているし、逆に

  1. ImageButton imagebutton=new ImageButton(this);
  2. imagebutton.setPadding(90, 0, 90, 0);

これが機能しない。

LayoutParams クラスを通すか否かの差?

最初は、LinearLayout などのレイアウトものは setPadding で
レイアウトものの中に配置する View ものは setMargins かと思ったんだけど
そうでもないみたい。

宿題・・・。

Android,困ったTT | 2011-01-22 (土) 17:21:38 |

setMargins

Posted by muchag | Android | 2011-01-22 (土) 16:41:56

レイアウト内部の配置場所を指定するには
setMargins メソッドを用いるのだが
これには ViewGroup クラスのサブクラス LayoutParams クラスを利用しないといけない。
Android Developers:ViewGroup.LayoutParams

記述例

import android.widget.LinearLayout;

public class Hoge extends Activity {

// 子オブジェクトのサイズのまま <- ちょっと違うみたい・・・ static final int WC = LinearLayout.LayoutParams.WRAP_CONTENT; // =-2 // 親オブジェクトのサイズに合わせる static final int FP = LinearLayout.LayoutParams.FILL_PARENT; // =-1 // どうやら API Level 8 からは MATCH_PARENT に変更になったらしい //static final int MP = LinearLayout.LayoutParams.MATCH_PARENT; // =-1 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //レイアウト LinearLayout layout = new LinearLayout(this); setContentView(layout); //ボタン Button button = new Button(this); LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(WC, WC); layoutParams.setMargins(10, 10, 10, 10); // (左, 上, 右, 下) button.setLayoutParams(layoutParams); layout.addView(button); } } [/android] 参考元:TechFirm 画面の作り方

new LinearLayout.LayoutParams(WC, WC) (22行目)

引数は (幅, 高さ) なわけで、6,8,10行目で設定した定数はもちろんのこと
(480, 50) のような実数でもOK。

Android | 2011-01-22 (土) 16:41:56 |

アクティビティ

Posted by muchag | Android | 2011-01-22 (土) 16:28:33

アクティビティ は、ユーザの目に触れるものでアプリ作成の基本。

アクティビティは、ユーザーが 1 つの操作を集中的に行うための
視覚的なユーザー インターフェースを表します。
たとえば、ユーザーが選択できるメニュー アイテムの一覧を表示するアクティビティや、
写真をキャプション付きで表示するアクティビティなどが考えられます。
SMS アプリケーションなら、あるアクティビティでメッセージを送信する連絡先の一覧を表示し、
別のアクティビティで選択した連絡先へのメッセージを入力し、
その他のアクティビティで古いメッセージを参照したり設定を変更したりできます。
これらのアクティビティを組み合わせて全体としてのユーザーインターフェースを形成しますが、
それぞれのアクティビティは相互に独立しています。
各アクティビティは、Activity 基本クラスのサブクラスとして実装されます。

アプリケーションは、1 つのアクティビティで構成することも、
上記のSMS アプリケーションのように複数のアクティビティで構成することもできます。
どのようなアクティビティがいくつ必要になるかは、アプリケーションやその設計に応じて異なります。
通常は、アクティビティのうちのいずれかを最初のアクティビティとして指定し、
ユーザーがアプリケーションを起動したときに表示します。
あるアクティビティから別のアクティビティに移動するには、現在のアクティビティから次のアクティビティを開始します。

各アクティビティには、それを表示するためのデフォルトのウィンドウが割り当てられます。
通常はウィンドウを画面全体に表示しますが、
画面より小さいウィンドウを他のウィンドウの前面に表示することもできます。
アクティビティに、新たなウィンドウを追加することも可能です。
たとえば、アクティビティの途中でユーザーの応答を要求するポップアップダイアログを表示したり、
ユーザーが画面上の特定のアイテムを選択したときに別ウィンドウで重要な情報を表示したりできます。

ウィンドウの視覚的なコンテンツは、ビュー(View 基本クラスの派生オブジェクト)の階層として提供されます。
各ビューは、ウィンドウ内の特定の矩形領域を制御します。
親ビューは、その子となるビューで構成され、それらの子ビューのレイアウトを決定します。
リーフビュー(階層の最下位に位置するビュー)は、そのビューが制御する矩形領域に表示され、
その領域でのユーザーのアクションに対して応答します。
つまり、ビューはアクティビティとユーザーが対話する場所です。
たとえば、ビューに小さな画像を表示し、
ユーザーがその画像をタップしたら何らかのアクションを開始することもできます。
Android には、ボタン、テキスト フィールド、スクロール バー、メニューアイテム、チェックボックスなど、
さまざまなビューがあらかじめ用意されています。

ビューの階層は、Activity.setContentView() メソッドを使用してアクティビティのウィンドウ内に配置します。
コンテンツ ビューは、階層のルートとなる View オブジェクトです
(ビューおよびその階層について詳しくはUser Interface のドキュメントをご覧ください)。

Android Developers:開発の基礎

ライフサイクル

アクティビティを生成してから破棄するまでの流れ。
アクティビティの状態に応じて、該当する関数が呼び出される。

非常にわかりやすいサイトがあったので
まだ初心者の私は、ひとまずこちらを引用&参考させていただきまとめた。
以後、理解が深まるに連れて自分なりの記事に修正していく。

引用&参考元サイト:rokuta96のAndroidアプリ開発 アクティビティのライフサイクル

以下の引用内容は覚書用に私が抜粋&改変しているので、
ご覧のみなさまは、上記 引用&参考元サイト から本物をご覧ください。

 
 
呼び出される関数は
onCreate()
onRestart()
onStart()
onResume()
onPause()
onStop()
onDestroy()

 
ここから抜粋引用&一部改変—

onCreate()

アクティビティが初めて作成されるときに呼び出されます。
通常の静的な設定(ビューの作成、リストへのデータのバインドなど)は、すべてのこのメソッドで行う必要があります。
このアクティビティの 以前の状態が保存されていた場合、このメソッドにはその状態を保持している Bundle オブジェクトが引数となります。
この後には、必ずonStart()が呼び出されます。
強制終了:不可
次:onStart()
 

onRestart()

アクティビティが停止した後、それをもう一度開始する直前に呼び出されます。
この後には、必ずonStart()が呼び出されます。
強制終了:不可
次:onStart()
 

onStart()

アクティビティがユーザーから見えるようになる直前に呼び出されます。
その後、アクティビティがフォアグラウンドに表示された場合はonResume()が、他のアクティビティの後ろに隠れた場合はonStop()が呼び出されます。
強制終了:不可
次:onResume() または onStop()
 

onResume()

アクティビティがユーザーとの対話を開始する直前に呼び出されます。
この時点で、アクティビティはアクティビティ スタックの最上位にあり、ユーザーからの入力はこのアクティビティに対して行われます。
この後には、必ずonPause()が呼び出されます。
強制終了:不可
次:onPause()
 

onPause()

システムが別のアクティビティを開始しようとしているときに呼び出されます。
このメソッドは、保存されていない変更を永続データにコミットする場合や、アニメーションのように CPU を大量に消費する処理を停止する場合に使用するのが一般的です。
このメソッドが終了するまでは次のアクティビティが開始されたないため、できる限り短時間で実行できるようにしておく必要があります。
その後、アクティビティがフォアグラウンドに戻った場合はonResume()が、ユーザーから見えなくなった場合はonStop()が呼び出されます。
強制終了:可能
次:onResume() または onStop()
 

onStop()

アクティビティがユーザーから見えなくなったときに呼び出されます。
見えなくなる状況としては、アクティビティが破棄された場合や、再開された別のアクティビティ(既存か新規かを問わず)によって隠された場合が考えられます。
その後、アクティビティがユーザーとの対話に戻った場合はonRestart()が、アクティビティが完全に終了する場合はonDestroy()が呼び出されます。
強制終了:可能
次:onRestart() または onDestroy()
 

onDestroy()

アクティビティが破棄される前に呼び出されます。
これが、アクティビティが受け取る最後の呼び出しとなります。
このメソッドが呼び出される状況としては、アクティビティが完了する場合(finish()が呼び出されたとき)や、システムが領域を確保するために一時的にそのアクティビティのインスタンスを破棄する場合が考えられます。
これらの 2 つの状況は、isFinishing()メソッドを使用して識別できます。
強制終了:可能
次:なし
 

  1. package com.example.activitytest;
  2.  
  3. import android.app.Activity;
  4. import android.os.Bundle;
  5. import android.util.Log;
  6.  
  7. public class ActivityTest extends Activity {
  8.     /** Called when the activity is first created. */
  9.     @Override
  10.     public void onCreate(Bundle savedInstanceState) {
  11.         Log.i("TEST", "onCreate() called.");
  12.         super.onCreate(savedInstanceState);
  13.         setContentView(R.layout.main);
  14.     }
  15.    
  16.     public void onStart() {
  17.         Log.i("TEST", "onStart() called.");
  18.         super.onStart();
  19.     }
  20.    
  21.     public void onRestart() {
  22.         Log.i("TEST", "onRestart() called.");
  23.         super.onRestart();
  24.     }
  25.  
  26.     public void onResume() {
  27.         Log.i("TEST", "onResume() called.");
  28.         super.onResume();
  29.     }
  30.    
  31.     public void onPause() {
  32.         Log.i("TEST", "onPause() called.");
  33.         super.onPause();
  34.     }
  35.    
  36.     public void onStop() {
  37.         Log.i("TEST", "onStop() called.");
  38.         super.onStop();
  39.     }
  40.  
  41.     public void onDestroy() {
  42.         Log.i("TEST", "onDestory() called.");
  43.         super.onDestroy();
  44.     }
  45. }

ライフサイクルに関わるonなんとか関数には、super.onXXXを最初に呼ばなければいけないそうです。
ここまで抜粋引用&一部改変—
 

まとめ

というより、現時点で理解できたこと。

アクティビティ生成時:onCreate()
可視化時:onStart() ← 復帰時:onRestart()
可触化時:onResume()
不可触化時:onPause()
不可視化時:onStop()
アクティビティ破棄時:onDestroy()
 

作成

アクティビティを作成するには、まずクラスファイルを1つ追加する。

[ファイル]-[新規]-[クラス] から
クラスファイルを新規作成する。

 
このとき、先に左ペインにあるパッケージ・エクスプローラの
当該パッケージまたは当該パッケージ内のファイルを選択しておくか、
そのファイルを開いてアクティブな状態で上記操作を行うと・・・

 
プロジェクト名とパッケージ名を自動入力してくれる。

また、左ダイアログで「スーパークラス」に android.app.Activity と入力しておくと
自動で Activity クラスを継承したクラスを生成してくれる。

 
自動生成されたコード。

  1. package com.example.hoge;
  2.  
  3. import android.app.Activity;
  4.  
  5. public class Sample extends Activity {
  6.  
  7. }

これでアクティビティを作成するためのクラスファイルが無事に完成。
 

AndroidManifest.xml への登録

後、忘れてはいけない のが AndroidManifest.xml への登録。
アクティビティ(コンポーネント)を追加する度に、必ず登録をすること。

左ペインのパッケージ・エクスプローラから
AndroidManifest.xml を開く。

 
①中央ペインの下部にあるタグの中から「アプリケーション」を選択。

②左画像に印した場所の「追加」をクリック。

 
「Activity」を選択して「OK」。

 
①先ほどクリックした「追加」の左側に、
新しく「Activity」ができているので、それを選択。

②右にある「Attributes for Activity」の Name* というところに
新しく作成したクラス名を手動入力するか
その右の「参照」をクリックしてクラスファイルを選択。

最後にセーブすれば無事に登録される。

中央ペイン下部のタブ群にある「AndroidManifest.xml」をクリックしてみれば
[mxml][/mxml]
と、追加されていることがわかる。

ん? ってことは、最初から AndroidManifest.xml を開いて
上記1行を追加すればいいんやんか・・・。
SSまで撮ったのにガッカリ。
すぐ気がつかないのは、相当頭がウニってるらしい。。。 🙄
 

起動モード

Android Wiki for Developers:アクティビティの起動モード
Androidメモ:アクティビティの起動モードと起動フラグ
 

呼出

Intent

Android | 2011-01-22 (土) 16:28:33 |
次ページへ »