安卓中高版本提示使用菜單的規則:使用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();
}