※ Android の最新(2012年6月末)の開発環境に関して
SkyDrive へ移動
普通にプロジェクトを作成すると以下のようになります。メニューの XML は最初から作成されていて、メニューが作成される最初のイベント(onCreateOptionsMenu)も作成されていますので、onOptionsItemSelected を追加して、メニューの処理を実装します。
▼ ifRoom フラグの意味
それのための余地がある場合にのみ、アクションバーでこの項目を配置します。
※ この設定により、以降のメニュー位置になります
Google、AndroidのMenuボタンに“告別
Googleは既存アプリのMenuボタンが担っていた機能を、「ActionBar」クラスを使って組み込み直すよう勧めている。
package com.example.androidapp;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.EditText;
import android.widget.Toast;
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;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// 選択されたメニュー項目の ID
int menuId = item.getItemId();
// 選択されたメニュー項目に表示されているテキスト
String menuText = item.getTitle().toString();
// 画面上のテキストフィールド
EditText editText = (EditText)findViewById(R.id.editText1);
// 画面上画像表示用コントロール
ImageView imageView = (ImageView)findViewById(R.id.imageView1);
switch(menuId){
case R.id.menu_action1:
Log.i("DEBUG:", "処理1が選択されました");
// 実際の番号でアイコンリソースを指定
imageView.setImageDrawable(getResources().getDrawable(17301555));
break;
case R.id.menu_action2:
Log.i("DEBUG:", "処理2が選択されました");
// 定義IDでアイコンリソースを指定
imageView.setImageDrawable(getResources().getDrawable(android.R.drawable.ic_menu_add));
break;
case R.id.menu_post:
// 画面遷移用
Log.i("DEBUG:", "投稿画面へ移動します");
break;
}
// 選択されたメニュー項目に表示されているテキストを
// テキストフィールドに表示
editText.setText(menuText);
return true;
}
}
ここでは、『投稿』で画面遷移を想定しています。17301555 は、android.R.drawable.ic_menu_add の実際の値です。
画面定義
<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:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:padding="20px"
android:text="CTRL+F12でエミュレータを横にすると、メニューにテキストが付加されます" />
<EditText
android:id="@+id/editText1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/textView1"
android:ems="10" />
<ImageView
android:id="@+id/imageView1"
android:layout_width="48px"
android:layout_height="48px"
android:layout_below="@+id/editText1"
android:layout_marginTop="24dp"
android:src="@drawable/ic_action_search" />
</RelativeLayout>
メニュー項目定義
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_post"
android:icon="@android:drawable/ic_menu_save"
android:title="投稿"
android:showAsAction="ifRoom|withText" />
<item android:id="@+id/menu_action1"
android:title="処理1"
android:orderInCategory="100"
android:showAsAction="never" />
<item android:id="@+id/menu_action2"
android:title="処理2"
android:orderInCategory="100"
android:showAsAction="never" />
</menu>
android:drawable の android は、package を意味しています。ic_menu_save 以外もたくさん定義されています。
関連する Android ドキュメント
Action Bar
関連する記事
android-binding を使って Windows C#(XAML) のようなバインド処理の実装