我使用了来自谷歌的这个指南和这篇教程来创建我的自定义上下文操作栏。
private ActionMode.Callback mActionModeCallback = new ActionMode.Callback() {
// Called when the action mode is created; startActionMode() was called
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
// Inflate a menu resource providing context menu items
MenuInflater inflater = mode.getMenuInflater();
inflater.inflate(R.menu.annotation_menu, menu);
return true;
}
// Called each time the action mode is shown.
// Always called after onCreateActionMode, but
// may be called multiple times if the mode is invalidated.
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return false; // Return false if nothing is done
}
// Called when the user selects a contextual menu item
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
switch (item.getItemId()) {
case R.id.custom_button:
// do some stuff
break;
case R.id.custom_button2:
// do some other stuff
break;
default:
// This essentially acts as a catch statement
// If none of the other cases are true, return false
// because the action was not handled
return false;
}
finish(); // An action was handled, so close the CAB
return true;
}
// Called when the user exits the action mode
@Override
public void onDestroyActionMode(ActionMode mode) {
mActionMode = null;
}
};
这个菜单是为了在用户选择文本时出现,所以它会覆盖原生的复制/粘贴菜单。现在我要说我的问题。
因为我正在覆盖文本选择功能,我还向WebView
添加了一个LongClickListener
并实现了onLongClick(View v)
方法,以便我可以检测到用户进行选择的操作。
myWebView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
if (mActionMode != null) {
return false;
}
mActionMode = startActionMode(mActionModeCallback);
v.setSelected(true);
return true;
}
});
当我长按时,我看到我的自定义菜单出现了,但没有文本被突出显示。
我需要有文本选择功能;没有它,我的菜单就毫无意义了。
我如何覆盖 onLongClick(View v)
,但保持 Android 提供的文本选择功能?
如果不可能,我能否在其他地方调用 startActionMode(mActionModeCallback)
,以便文本会像正常情况下一样被选中,但我的自定义菜单也会出现?
如果这两个都不可能......请帮帮我。