安卓菜單的使用系列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();
	}


發佈了97 篇原創文章 · 獲贊 1 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章