Android的Menu

本文介绍了Android中菜单和上下文菜单的创建方法。创建菜单时,按下菜单按钮会调用onCreateOptionsMenu方法,按下菜单项会调用onOptionSelected方法。上下文菜单与Activity视图关联,长按项目可显示。创建上下文菜单需覆写相关方法并为控件注册。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Menu

创建一个菜单;直接上代码:只用改.java 中的内容;
解释一下:当菜单按钮被按下后onCreateOptionsMenu()方法就被调用,进而调用onCreateMenu()方法辅助显示菜单项。
当菜单项被按下后,onOptionSelected()方法就调用。

	import android.support.v7.app.ActionBarActivity;
	import android.os.Bundle;
	import android.support.v7.app.AppCompatActivity;
	import android.view.Menu;
	import android.view.MenuItem;
	import android.widget.Toast;
	
	
	public class MainActivity extends AppCompatActivity {
	
	    @Override
	    protected void onCreate(Bundle savedInstanceState) {
	        super.onCreate(savedInstanceState);
	        setContentView(R.layout.activity_main);
	    }
	
	    private void createMenu(Menu menu)
	    {
	        MenuItem menu1 = menu.add(0,0,0,"Item1");//四个参数GroupId , itemid, order, title,
	        //GroupId菜单选项所在组的标识符,如果不在组中则使用0;
	        //itemid 选项唯一的id
	        //选项显示的顺序
	        //菜单项显示的文本;
	        {
	            menu1.setAlphabeticShortcut('a');//设置快捷键为a
	        }
	        MenuItem menu2 = menu.add(0,1,1,"Item2");
	        {
	            menu1.setAlphabeticShortcut('b');
	        }
	        MenuItem menu3 = menu.add(0,2,2,"Item3");
	        {
	            menu1.setAlphabeticShortcut('c');
	        }
	        MenuItem menu4 = menu.add(0,3,3,"Item4");
	        {
	            menu1.setAlphabeticShortcut('d');
	        }
	        menu.add(0,4,4,"Item5");
	        menu.add(0, 5, 5, "Item6");
	        menu.add(0, 6, 6, "Item7");
	    }
	
	    private boolean MenuChoice(MenuItem item)
	    {
	         switch (item.getItemId())
	         {
	             case 0:
	                 Toast.makeText(this, "you clicked on item1", Toast.LENGTH_LONG).show();
	                 return true;
	             case 1:
	                 Toast.makeText(this, "you clicked on item2", Toast.LENGTH_LONG).show();
	                 return true;
	             case 2:
	                 Toast.makeText(this, "you clicked on item3", Toast.LENGTH_LONG).show();
	                 return true;
	             case 3:
	                 Toast.makeText(this, "you clicked on item4", Toast.LENGTH_LONG).show();
	                 return true;
	             case 4:
	                 Toast.makeText(this, "you clicked on item5", Toast.LENGTH_LONG).show();
	                 return true;
	             case 5:
	                 Toast.makeText(this, "you clicked on item6", Toast.LENGTH_LONG).show();
	                 return true;
	             case 6:
	                 Toast.makeText(this, "you clicked on item7", Toast.LENGTH_LONG).show();
	                 return true;
	         }
	        return false;
	    }
	    
	    public boolean onCreateOptionsMenu(Menu menu)
	    {
	        super.onCreateOptionsMenu(menu);
	        createMenu(menu);
	        return true;
	    }
	    
	    public boolean onOptionsItemSelected(MenuItem item)
	    {
	        return MenuChoice(item);  
	    }
	
	    
	
	}

在这里插入图片描述

上下文菜单;

上下文菜单通常与Activity视图相关联,当用户长按某个项目时就能出来。例如长按按钮可以显示一个上下文菜单与之关联
本例中就使用这个例子。(由于在我的摸仪器上无法注册按钮的上下菜单,运行就出现无法运行的现象,如果有读者知道解决的办法,欢迎在底下评论告知我。下面引用的例子是我在网上找的一个例子);
在Android中长按住一个控件(像一个文本显示框TextView,一个按钮Button都是一个控件)弹出的菜单为上下文菜单,创建一个上下文菜单分为下面几个步骤:
1、覆写onCreateContextMenu方法,生成对应的菜单子选项。
2、覆写onContextItemSelected方法,生成对应子选项的响应事件。
3、为一个控件注册上下文菜单。
下面看一个小例子:
1、在MainActivity的xml文件中添加一个TextView控件,ID为myTextV:

		<TextView android:id="@+id/myTextV"
		        android:layout_width="wrap_content"
		        android:layout_height="wrap_content"
		        android:text="@string/hello_world" />

2、在MainActivity编写相应代码:

		import android.os.Bundle;
		import android.app.Activity;
		import android.view.ContextMenu;
		import android.view.Menu;
		import android.view.MenuItem;
		import android.view.View;
		import android.view.ContextMenu.ContextMenuInfo;
		import android.widget.TextView;
		
		public class MainActivity extends Activity {
		
		    // 声明菜单子选项ID号
		    private static final int ITEM1 = Menu.FIRST;
		    private static final int ITEM2 = ITEM1 + 1;
		    private static final int ITEM3 = ITEM1+2;
		    //声明TextView控件
		    private TextView myTextV;
		    @Override
		    protected void onCreate(Bundle savedInstanceState) {
		        super.onCreate(savedInstanceState);
		        setContentView(R.layout.activity_main);
		        //找到文本显示控件
		        myTextV = (TextView)findViewById(R.id.myTextV);
		        //为该文本控件注册上下文菜单
		        registerForContextMenu(myTextV);
		    }
		
		
		    @Override
		    public boolean onCreateOptionsMenu(Menu menu) {
		        // Inflate the menu; this adds items to the action bar if it is present.
		        getMenuInflater().inflate(R.menu.main, menu);
		        return true;
		    }
		    /*
		     * 覆写onCreateContextMenu方法,建立上下午菜单
		     * 
		     * */
		    @Override
		    public void onCreateContextMenu(ContextMenu menu, View v,
		            ContextMenuInfo menuInfo) {
		        /*
		         * add方法的参数说明:
		          * 参数一:group ID(int) :组ID,用于标示该子选项属于哪一个组
		         * 参数二:item ID(int) :子选项ID,用于标示该子选项
		         * 参数三:order ID(int): 显示顺序,用于标示该子选项显示顺序,默认为0,表示按添加顺序显示
		         * 参数四:title (String): 用于定义该子选项的显示文字
		         * 
		         * */
		        menu.add(0,ITEM1,0,"背景红色");
		        menu.add(0,ITEM2,0,"背景黄色");
		        menu.add(0,ITEM3,0,"背景蓝色");
		    }
		    /*
		     * 覆写该方法,添加相应的菜单相应事件
		     * 
		     * */
		    @Override
		    public boolean onContextItemSelected(MenuItem item) {
		        /*
		         * 根据选择的子选项(通过item ID来区分),进行不同的响应
		         * 
		         * 这里使用的颜色资源要在res/values文件夹内的color.xml文件中声明
		         * 
		         * */
		        switch (item.getItemId()) {
		        case ITEM1:
		            //设置文本显示控件的背景
		            myTextV.setBackgroundColor(getResources().getColor(R.color.red));
		            break;
		        case ITEM2:
		            myTextV.setBackgroundColor(getResources().getColor(R.color.yellow));
		            break;
		        case ITEM3:
		            myTextV.setBackgroundColor(getResources().getColor(R.color.white));
		            break;
		        default:
		            break;
		        }
		        return true;
		    }
		}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值