Google Androidで画面遷移
マクドナルドにて一人もくもく会。
先日のメニュー表示に引き続き、書籍を読みながら、画面遷移のプログラムを書いてみた。
シチュエーションは、メニューを表示させ、そこからメニュー専用の画面に飛ぶというもの。
今回はじめて、一つのアプリに複数のActivityを作った。
一つはメイン画面で、もう一つはメニュー画面。
遷移をするためには、Intentオブジェクトが必要で、ここに遷移先の名前や渡すデータをセットしstartActivity()をコールすれば、遷移してくれた。
他にも、エミュレータの向きを変更するショートカットやタイトルの消去など、細かいことを知ることができて有意義だった。
メモ
- 画面遷移
- エミュレータの向き変更
- 縦横の向きはCtrl + F11で変更できる
- ウィンドウタイトルの消去
- requestWindowFeature()で消去できる
- 背景色の変更
- setBackgroundColor()で変更可能
- Viewを継承したクラスを自分で作らないと背景色の変更は出来ない?
- テーマの変更
- ウィンドウタイトルの有無や背景色をセットにしたテーマを設定することでも見栄えを変更できる
- AndroidManifest.xmlまたはjavaソースコードから設定することが可能。
- AndroidManifest.xmlは、application要素またはactivity要素にandroid:theme属性を追加する。
- application要素に追加すると、アプリ全体に適用される。
- javaソースコードは、setTheme()で設定する。(setContentViewメソッドの前にコールしないといけないらしい)
- javaソースコードからは、Activityごとにしかテーマを設定できない。
- デフォルトテーマはBlack
package com.example.android.helloworldmenu; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.WindowManager; public class HelloWorldMenu extends Activity { final int MENU_ID_SETTING = 0; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); setContentView(R.layout.main); } @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); MenuItem menuItem = menu.add(0, MENU_ID_SETTING, 0, "Setting"); menuItem.setIcon(android.R.drawable.ic_menu_preferences); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case MENU_ID_SETTING: transSetting(); return true; } return false; } // 設定画面に遷移 private void transSetting() { Intent intent = new Intent(); intent.setClassName(getPackageName(), getClass().getPackage().getName()+".Setting"); startActivity(intent); } }
package com.example.android.helloworldmenu; import android.app.Activity; import android.os.Bundle; import android.view.WindowManager; public class Setting extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); setContentView(new SettingView(this)); DebugUtility.showToast(this, "Setting.onCreate()"); } }
package com.example.android.helloworldmenu; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.view.View; public class SettingView extends View { public SettingView(Context context) { super(context); setBackgroundColor(Color.WHITE); } @Override protected void onDraw(Canvas canvas) { canvas.drawText("Setting", 100, 100, new Paint()); } }
package com.example.android.helloworldmenu; import android.content.Context; import android.widget.Toast; public class DebugUtility { public static void showToast(Context context, String str) { Toast toast = Toast.makeText(context, str, Toast.LENGTH_SHORT); toast.show(); } }
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.android.helloworldmenu" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name" android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" android:debuggable="true"> <activity android:name=".HelloWorldMenu" android:label="@string/app_name" android:screenOrientation="landscape" android:configChanges="keyboardHidden|orientation"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".Setting" android:label="@string/app_name" android:screenOrientation="landscape" android:configChanges="keyboardHidden|orientation"> <intent-filter> <action android:name="android.intent.action.MAIN" /> </intent-filter> </activity> </application> <uses-sdk android:minSdkVersion="3" /> </manifest>