2012年03月06日

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


アイコンの追加
オプションメニューのメニュー項目にはアイコンを追加することができます
(コンテキストメニューでは使えません)
オプションメニューを表示する
アイコン付きのメニューを表示するにはsetIconを使います
setIconにはアンドロイドにあらかじめ用意されているアイコンを指定できます

どのようなアイコンか一覧で表示されているページ( Taosoftware- Android メニューアイコン)があるのでここをみるとわかりやすいです
今回はic_menu_searchとic_menu_shareを指定しています
オプションメニューを表示するを元にカスタマイズしてみました
package blog.test;
 
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
 
public class TestActivity extends Activity {
private static final int ITEM1 = Menu.FIRST;
private static final int ITEM2 = Menu.FIRST + 1;
    /** 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) {
    	//menuItem1作成
    	MenuItem menuItem1 = menu.add(Menu.NONE, ITEM1, Menu.NONE, "menuItem1");
        //mneuItem1のアイコン設定
    	menuItem1.setIcon(android.R.drawable.ic_menu_search);
        //menuItem2作成
    	MenuItem menuItem2 = menu.add(Menu.NONE, ITEM2, Menu.NONE, "menuItem1");
    	//mneuItem2のアイコン設定
    	menuItem2.setIcon(android.R.drawable.ic_menu_share);
            return true;
        }
     
    //menuが押された時の処理
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case ITEM1:
            // ここにITEM1が押された時の処理を記述
            Log.i("tag","ITEM1が押されました");
            return true;
        case ITEM2:
            // ここにITEM2が押された時の処理を記述
            Log.i("tag","ITEM2が押されました");
            return true;
        }
        return false;
    }
     
     
     
}
menuボタンを押すとアイコンが追加されているのがわかります
device17.png
スポンサードリンク

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

コンテキストメニューを表示する


コンテキストメニューはウィジェットに応じて変化するメニューです
ポップアップメニューみたいなものです
アンドロイドでは、ウィジェットの上で長押しする事で
ウィジェットに関連付けられたコンテキストメニューを表示する事ができます
コンテキストメニューのプログラムの例
package blog.test;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;

public class TestActivity extends Activity {
private static final int BUTTON1_MENU_ITEM1 = Menu.FIRST;
private static final int BUTTON1_MENU_ITEM2 = Menu.FIRST + 1;

private static final int BUTTON2_MENU_ITEM1 = Menu.FIRST + 2;
private static final int BUTTON2_MENU_ITEM2 = Menu.FIRST + 3;
private Button button1, button2;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
		LinearLayout layout = new LinearLayout(this);
		layout.setOrientation(LinearLayout.VERTICAL);
		setContentView(layout);
		
		//ボタンを配置
		button1 = new Button(this);
		button1.setText("ボタン1");
		layout.addView(button1);
		registerForContextMenu(button1);
		
		button2 = new Button(this);
		button2.setText("ボタン2");
		layout.addView(button2);
		registerForContextMenu(button2);
    }
    
    //menu作成
	@Override
	public void onCreateContextMenu(ContextMenu menu, View v,
	        ContextMenuInfo menuInfo) {
	    if (v.equals(button1)) {//button1のボタン設定
	        menu.add(Menu.NONE, BUTTON1_MENU_ITEM1, Menu.NONE, "button1Menu1");
	        menu.add(Menu.NONE, BUTTON1_MENU_ITEM2, Menu.NONE, "button1Menu2");
	    } else if (v.equals(button2)) {//button2のボタン設定
	        menu.add(Menu.NONE, BUTTON2_MENU_ITEM1, Menu.NONE, "button2Menu1");
	        menu.add(Menu.NONE, BUTTON2_MENU_ITEM2, Menu.NONE, "button2Menu2");
	    }
	}
	
	//menuが押された時の処理
	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
	    switch (item.getItemId()) {
	    case BUTTON1_MENU_ITEM1:
	        // ここにBUTTON1_MENU_ITEM1が押された時の処理を記述
	    	Log.i("tag","ITEM1が押されました");
	        return true;
	    case BUTTON1_MENU_ITEM2:
	        // ここにBUTTON1_MENU_ITEM2が押された時の処理を記述
	    	Log.i("tag","ITEM2が押されました");
	        return true;
	    case BUTTON2_MENU_ITEM1:
	        // ここにBUTTON2_MENU_ITEM1が押された時の処理を記述
	    	Log.i("tag","ITEM2が押されました");
	        return true;
	    case BUTTON2_MENU_ITEM2:
	        // ここにBUTTON2_MENU_ITEM2が押された時の処理を記述
	    	Log.i("tag","ITEM2が押されました");
	        return true;
	    }
	    return false;
	}
	
	
	
}
まずアクティビティにボタンを2つ位置しています
それぞれのボタンに割り振られたメニューを表示させるようにしています
ボタン1を長押しすると以下のようなメニューが表示されます
device15.png
ボタン2を長押しすると以下のようなメニューが表示されます
device16.png
今回もそれぞれのメニューボタンにログを出力するよう設定しています
オプションメニューのメソッドとコンテキストメニューのメソッドは
似たようなメソッドが使われます

コンテキストメニューでは、メニューを作成するとき
onCreateOptionsMenuでは無くonCreateContextMenu
メニュー項目が選択された時のイベントメソッドとして
onOptionsItemSelectedでは無くonContextItemSelectedが呼ばれます
コンテキストメニューの場合にはregisterForContextMenu
コンテキストメニューの対象となるウィジェットを指定させています
スポンサードリンク

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

オプションメニューを表示する


オプションメニューとは・・・
オプションメニューは、MENUキーを押す事で表示されるメニューです
オプションメニューを表示する簡単なプログラム例です
package blog.test;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;

public class TestActivity extends Activity {
private static final int ITEM1 = Menu.FIRST;
private static final int ITEM2 = Menu.FIRST + 1;
    /** 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) {
	        menu.add(Menu.NONE, ITEM1, Menu.NONE, "menuItem1");
	        menu.add(Menu.NONE, ITEM2, Menu.NONE, "menuItem2");
	        return true;
	    }
	
	//menuが押された時の処理
	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
	    switch (item.getItemId()) {
	    case ITEM1:
	        // ここにITEM1が押された時の処理を記述
	    	Log.i("tag","ITEM1が押されました");
	        return true;
	    case ITEM2:
	        // ここにITEM2が押された時の処理を記述
	    	Log.i("tag","ITEM2が押されました");
	        return true;
	    }
	    return false;
	}
	
	
	
}
プログラムを起動して、MENUキーを押すと
画面の下部に以下のようにメニューが表示されます
device14.png
それぞれのボタンを押すとログが出力されます
ログの出力の仕方
まずonCreateOptionsMenuメソッドにメニューを作成するコ−ドを記述します
Menuオブジェクトにaddメソッドを使ってメニュー項目を追加していきます
add(int groupId, int itemId, int order, CharSequence title)
とありますが
メニューのグループID,メニューのID,メニューの表示順,メニューの表示タイトルを指定してメニュー項目を追加していきます
今回はグループIDと表示順はとくに指定していないため
Menu.NONEとしています
メニュー項目が選択されるとonOptionsItemSelectedメソッドが呼ばれます
ここでメニューが押された時の処理を記述していきます
今回はボタンに応じてログを出力させています
スポンサードリンク

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

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