Android TIPS No.01 状態による機能変更
Android入門はもう少しありますが、それ以外でのAndroidの開発機能で面白い部分を取り上げていく(予定)。No.02まではできています。
状態による機能変更
端末の向きで動作を変える
今までエミュレータの状態は縦で行ってきた。当たり前だが実際の端末では縦にも横にも使用される。エミュレータでも縦、横の状態は変更できる。変更するにはCtrl+F11を押す。また、縦横の状態でレイアウトファイルを別のものにすることができる。ここではActirivtyのライフサイクルとともにそれを確認する。まず以下の条件でプロジェクトを作成する。
項目 | 内容 |
---|---|
Project name | TipsActivity |
Build Target | Android 1.6 |
Application name | TipsActivity |
Package name | sample.ta |
Create Activity | TipsActivity |
Min SDK Version | 4 |
まず通常通りmain.xmlで端末が縦の場合のレイアウトを定義する。
<?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" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:textColor="#0000ff" android:textSize="40sp" android:text="縦" /> </LinearLayout>
次に、端末が横向きの場合のレイアウトファイルを作成する。場所はres/layout-land/main.xmlとなる。ここでlayoutフォルダの後につけた-landが横向きの場合という定義となる。端末が横向きの場合にはこのファイルが使用される。
<?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" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:textSize="40sp" android:textColor="#ff0000" android:text="横" /> </LinearLayout>
最後にTipsActivity.javaを以下のようにする。特に何もしておらずレイアウトファイルを読み込み、かつ状態が変わるたびにログを出力しているだけである。
package sample.ta; import android.app.Activity; import android.os.Bundle; import android.util.Log; public class TipsActivity extends Activity { private static final String LOG_TAG = TipsActivity.class.getSimpleName(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.i(LOG_TAG, "onCreate"); setContentView(R.layout.main); } @Override protected void onStart() { super.onStart(); Log.i(LOG_TAG, "onStart"); } @Override protected void onResume() { super.onResume(); Log.i(LOG_TAG, "onResume"); } @Override protected void onRestart() { super.onRestart(); Log.i(LOG_TAG, "onRestart"); } @Override protected void onPause() { super.onPause(); Log.i(LOG_TAG, "onPause"); } @Override protected void onStop() { super.onStop(); Log.i(LOG_TAG, "onStop"); } @Override protected void onDestroy() { super.onDestroy(); Log.i(LOG_TAG, "onDestroy"); } }
まず、通常通り起動すると以下のように縦表示でActivityが表示される。
一度ActivityがonDestroyで破棄されて再度onCreateによりActivityが構築されているのがわかる。つまり縦横のレイアウトが自動で読み込まれるのは、Activityの再構築が行われているためである。