2012年03月07日

xmlリソースファイルでメニューを作成する


メニューはxmlリソースファイルにメニューを定義して
これを読み込んで表示させる事もできます

まずはresフォルダ下にmenuフォルダを作成します
resフォルダを右クリックし新規作成からフォルダーを選択します
device28.png
フォルダー名にmenuと入力し完了をクリックします

新しくmenuフォルダができたら今度はそのフォルダーを右クリックし
新規→Android XML ファイルを選んでください
device29.png
一覧にない場合はその他から探して選んでください
新規作成画面になったらファイルに名前を入れてください
今回はそのままmenuとしました(任意で変更可能)
完了を押すとメニュー作成画面になります
ここにItemなどを追加していきます

追加からItemを選択すると
のような画面になります
device30.png
それぞれ項目を入力していきます
最低限入力しなければならないのは以下の4つです
Id:idを入力 自動で入力されるが変更可能
Title:表示される文字を記入
Visible:表示されるかどうか
Enabled:ボタンとして押せるかどうか
今回はついでにIconも設定しました
device31.png
これでXmlファイルは完成です
次にjavaのソースコードを以下のようにします
package blog.test;
 
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;

 
public class TestActivity extends Activity {

	@Override
	public void onCreate(Bundle savedInstanceState) {
	    super.onCreate(savedInstanceState);
	
	}
	
	//オプションメニューを追加
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		super.onCreateOptionsMenu(menu);
		MenuInflater inflater = getMenuInflater();
		inflater.inflate(R.menu.menu, menu);
		return true;
	}
	

	/**onOptionsItemSelected はメニュー項目を選択した時に自動的に呼ばれる**/
	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		switch(item.getItemId()){
		/**item1を押したとき**/
		case R.id.item1:
			Log.i("tag","item1が押されました");
			 return true;
		}
		return false;
	}
}
inflater.inflate(R.menu.menu, menu);で先ほど作成したmenuを指定しています
また、item1が選択された時Logが出力されるようになっています
device32.png
スポンサードリンク

posted by kenken at 17:27 | Comment(0) | TrackBack(0) | ウィジェット メニュー | このブログの読者になる | 更新情報をチェックする

メニュー項目の追加


メニューは項目数によって画面の表示が変化します
メニューは2段で最大6個までしか画面に表示することができません
7個以上の場合は"その他"をクリックすると拡張メニューとして表示されます
今回はメニューを表示されるたびItem数が増加していくプログラムです
メニューとコンテキストメニューも表示されるたび増えていきます
package blog.test;
 
import android.app.Activity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
 
public class TestActivity extends Activity {
	//menuの表示順を定義
	private int optionsMenu = 1;
	private int contextMenu = 1;
	
	private Button button;
	
	@Override
	public void onCreate(Bundle savedInstanceState) {
	    super.onCreate(savedInstanceState);
	
	    LinearLayout layout = new LinearLayout(this);
	    layout.setOrientation(LinearLayout.VERTICAL);
	    setContentView(layout);
	//buttonを追加
	    button = new Button(this);
	    button.setText("ボタン");
	    layout.addView(button);
	
	    registerForContextMenu(button);
	}
	
	//オプションメニューを追加
	@Override
	public boolean onPrepareOptionsMenu(Menu menu) {
		//表示されるたび追加
	    menu.add(String.format("Item%d", optionsMenu++));
	    return true;
	}
	
	//コンテキストメニュー追加
	@Override
	public void onCreateContextMenu(ContextMenu menu, View v,
	        ContextMenuInfo menuInfo) {
		contextMenu++;
	  //表示されるたび追加
		for(int i=1;icontextMenu;i++)
	        menu.add(String.format("Item%d", i));
	}
}

メニューが1つのとき
device19.png
メニューが2つのとき
device20.png
メニューが3つのとき
device21.png
メニューが4つのとき
device22.png
メニューが5つのとき
device23.png
メニューが6つのとき
device24.png
メニューが6つ以上のときはその他になります
device25.png
それ以上のときその他を選択すると・・・
device27.png
スポンサードリンク

posted by kenken at 15:35 | Comment(0) | TrackBack(0) | ウィジェット メニュー | このブログの読者になる | 更新情報をチェックする

メニュー表示のカスタマイズ(2)


サブメニューの表示
オプションメニューにはサブメニューを追加することができます
オプションメニューを表示する
サブメニューの下にさらにサブメニューを追加する事はできません
またコンテキストメニューにはサブメニューを使用する事はできません
package blog.test;
 
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
 
public class TestActivity extends Activity {
	//menuの表示順を定義
	private static final int FILE = Menu.FIRST;
	private static final int EDIT = Menu.FIRST+10;

	private static final int FILE_NEW = FILE+1;
	private static final int FILE_OPEN = FILE+2;
	private static final int FILE_SAVE = FILE+3;;
	 
	private static final int EDIT_UNDO = EDIT+1;
	private static final int EDIT_REDO = EDIT+2;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
 
    }
     
    //menu作成
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
		boolean result = super.onCreateOptionsMenu(menu);
		//menuとSubMenuを作成
		SubMenu fileMenu = menu.addSubMenu(Menu.NONE, FILE, Menu.NONE, "File");
		SubMenu editMenu = menu.addSubMenu(Menu.NONE, EDIT, Menu.NONE, "Edit");
		
		fileMenu.add(Menu.NONE, FILE_NEW, Menu.NONE, "new");
		fileMenu.add(Menu.NONE, FILE_OPEN, Menu.NONE, "open");
		fileMenu.add(Menu.NONE, FILE_SAVE, Menu.NONE, "save");
		 
		editMenu.add(Menu.NONE, EDIT_UNDO, Menu.NONE, "undo");
		editMenu.add(Menu.NONE, EDIT_REDO, Menu.NONE, "redo");
	return result;
	}
	
    //menuが押された時の処理
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case FILE_NEW:
            // ここにITEM1が押された時の処理を記述
            Log.i("tag","FILE_NEWが押されました");
            return true;
        case FILE_OPEN:
            // ここにITEM2が押された時の処理を記述
            Log.i("tag","FILE_OPENが押されました");
            return true;
        case FILE_SAVE:
            // ここにITEM1が押された時の処理を記述
            Log.i("tag","FILE_SAVEWが押されました");
            return true;
        case EDIT_UNDO:
            // ここにITEM2が押された時の処理を記述
            Log.i("tag","EDIT_UNDOが押されました");
            return true;
        case EDIT_REDO:
            // ここにITEM1が押された時の処理を記述
            Log.i("tag","EDIT_REDOが押されました");
            return true;
        }
        return false;
    }
     
     
     
}
「MENU」→「File」を選択するとサブメニューが表示されます
device18.png
スポンサードリンク

posted by kenken at 13:56 | Comment(0) | TrackBack(0) | ウィジェット メニュー | このブログの読者になる | 更新情報をチェックする
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。