Я использовал это руководство от Google и этот учебник для создания собственной контекстной панели действий.
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;
}
};
Это меню предназначено для отображения, когда пользователь выбирает текст, поэтому он переопределяет собственное меню копирования/вставки. Теперь я подхожу к моей проблеме.
Поскольку я переопределяю функции для выбора текста, я также добавил LongClickListener
в WebView
и реализовал метод 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)
в другом месте, чтобы текст был выбран как обычный, но появится мое пользовательское меню?
Если ни одна из них не возможна... help.