安卓菜单的使用系列4:使用ActionMode显示菜单

安卓中高版本提示使用菜单的规则:使用ActionMode显示菜单,下面我们来一起看一下这种使用方式。

整体思路:在xml文件中定义一个button,并在MainActivity中定义它的点击事件,在MainActivity中声明一个ActionMode对象,定义一个匿名内部类ActionMode.Callback,配合ActionMode的使用,用于长按按钮显示菜单的功能,在button点击事件中开启这个匿名内部类,并设置菜单可以选中,在onActionItemClicked这个方法设置点击操作。

menu.xml文件:

<menu xmlns:android="http://schemas.android.com/apk/res/android" >


    <item
        android:id="@+id/edit"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="Edit"/>
    
     <item
        android:id="@+id/share"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="Share"/>
     
      <item
        android:id="@+id/delete"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="Delete"/>


</menu>

MainActivity.java文件:

button=(Button)findViewById(R.id.button1);
		button.setOnLongClickListener(new OnLongClickListener() {
			
			@SuppressLint("NewApi")
			@Override
			public boolean onLongClick(View v) {
				// TODO Auto-generated method stub
				if(actionMode!=null){
					return false;
				}
				actionMode =startActionMode(actionCallback);
				v.setSelected(true);//表示用户可以选中它
				return true;
			}
		});
//	是一个匿名内部类,配合ActionMode的使用,用于长按按钮显示菜单的功能
	private ActionMode.Callback actionCallback=new ActionMode.Callback() {
		
		@Override
		public boolean onPrepareActionMode(ActionMode arg0, Menu arg1) {
			// TODO Auto-generated method stub
			return false;
		}
		
		@Override
		public void onDestroyActionMode(ActionMode arg0) {
			// TODO Auto-generated method stub
			actionMode=null;//在菜单销毁的时候置空
		}
		
//		表示我们要从xml中加载菜单
		@Override
		public boolean onCreateActionMode(ActionMode mode, Menu menu) {
			// TODO Auto-generated method stub
			MenuInflater inflater=getMenuInflater();
			inflater.inflate(R.menu.main, menu);//把菜单加载进来
			return true;
		}
		
		@Override
		public boolean onActionItemClicked(ActionMode arg0, MenuItem item) {
			// TODO Auto-generated method stub
			switch (item.getItemId()) {
			case R.id.delete:
				delete();
				break;
			case R.id.edit:
				Toast.makeText(MainActivity.this, "Edit", 1).show();
				break;
            case R.id.share:
            	Toast.makeText(MainActivity.this, "Share", 1).show();
				break;
			}
			return false;
		}
	};

	public void delete(){
		Toast.makeText(MainActivity.this, "Delete", 1).show();
	}


你可能感兴趣的:(安卓,菜单,ActionMode,显示菜单)