android:三种菜单(Menu)的设置

(1)Menu 菜单

菜单分为三种(1)系统菜单:OptionMenu        当点击手机菜单键时弹出来的菜单

                        (2)上下文菜单:ContextMenu         比如当长按listView后弹出来的菜单键

                        (3)弹出菜单 :PopupMenu         当点击之后弹出来的菜单


(1)系统菜单设置步骤:

                      <1>首先在需要菜单的Activit生成回调方法:

                                                                       onCreateOptionsMenu(Menu menu)   (这个方法一般在创建项目的时候在MainActivity中生成,就不赘述了

                    <2>生成菜单上的每个item元素

                                        在res文件-------menu文件夹---------main.xml   中进行声明菜单的item

                     <3>为每个item设置监听事件

                                           调用方法:onOptionItemSelected(MenuItem item)

      

                                  {switch (item.getItemId()) {
                                   case R.id.action_settings:
                                        // 点击时显示系统的设置界面
                                   startActivity(new Intent(Settings.ACTION_SETTINGS));

                                        break;
                                       case R.id.action_add:
                                   // 点击时放大TextView上的字体
                                   textView.setTextSize(textView.getTextSize() + 5);
                                         break;
                                 case R.id.action_sub:
                                    textView.setTextSize(textView.getTextSize() - 5);
                                     break;
                                        }
                                    return super.onOptionsItemSelected(item);

                                     }

假如需要在菜单中设置图标则需要设置
// 为系统菜单项添加图标
	// enable为true时,菜单添加图标有效,enable为false时无效。4.0+系统默认无效
	private void setIconEnable(Menu menu, boolean enable) {
		try {
			Class clazz = Class
					.forName("com.android.internal.view.menu.MenuBuilder");
			
			Method m = clazz.getDeclaredMethod("setOptionalIconsVisible",
					boolean.class);
			
			m.setAccessible(true);
			
			// MenuBuilder实现Menu接口,创建菜单时,传进来的menu其实就是MenuBuilder对象(java的多态特征)
			m.invoke(menu, enable);

		} catch (Exception e) {
			e.printStackTrace();
		}
	}

(2)上下文菜单(ContextMenu)

protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		textView = (TextView) findViewById(R.id.textView);
		// 1:给需要上下文菜单的UI视图注册上下文菜单
		// 当在textView上长按时会出现上下文菜单 ---会去回调创建上下文菜单的方法onCreateContextMenu
		registerForContextMenu(textView);
	}
	// 2:创建上下文菜单
	// menu接收的是上下文菜单对象,由系统创建
	// v接收的被注册了上下文菜单的视图对象
	@Override
	public void onCreateContextMenu(ContextMenu menu, View v,
			ContextMenuInfo menuInfo) {
		// 创建菜单项对象并加入到上下文菜单对象中(menu)
		getMenuInflater().inflate(R.menu.main, menu);
		super.onCreateContextMenu(menu, v, menuInfo);
	}

	// 3:给上下文菜单项添加事件监听
	@Override
	public boolean onContextItemSelected(MenuItem item) {
		switch (item.getItemId()) {
		此处设置添加监听事件省略
		}
		return super.onContextItemSelected(item);
	}
(3)弹出菜单:PopupMenu

//弹出菜单是从3。0才有的,所以api最低要求是 11
	public void showPopMenu(View v)
	{
		//创建弹出菜单对象
		//第二个参数是弹出菜单显示的参考位置,需要一个视图对象
		//点击按钮时,让弹出菜单在按钮旁边显示
		PopupMenu  pop = new PopupMenu(this, v);
		//把菜单项加入到弹出菜单中
		getMenuInflater().inflate(R.menu.main, pop.getMenu());
		
		//给菜单项添加事件监听
		pop.setOnMenuItemClickListener(new OnMenuItemClickListener() {
			@Override
			public boolean onMenuItemClick(MenuItem item) {
				//这里与前两个switch一致
				return false;
			}
		});
		//显示菜单
		pop.show();
	}




你可能感兴趣的:(android)