Verwenden Sie eine benutzerdefinierte kontextbezogene Aktionsleiste für die WebView-Textauswahl

Ich habe benutztdieser Leitfaden von Google unddieses Tutorial um meine eigene kontextbezogene Aktionsleiste zu erstellen.

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;
    }
};

Dieses Menü wird angezeigt, wenn der Benutzer Text auswählt, sodass das native Menü zum Kopieren / Einfügen überschrieben wird. Jetzt komme ich zu meinem Thema.

Da ich Funktionen für die Textauswahl überschreibe, habe ich auch eineLongClickListener zu einemWebView und implementiert dieonLongClick(View v) Methode, damit ich erkennen kann, wenn Benutzer die Auswahl treffen.

    myWebView.setOnLongClickListener(new View.OnLongClickListener() {

        @Override
        public boolean onLongClick(View v) {
            if (mActionMode != null) {
                return false;
            }

            mActionMode = startActionMode(mActionModeCallback);
            v.setSelected(true);
            return true;
        }
    });

Wenn ich lange klicke, wird mein benutzerdefiniertes Menü angezeigt, aber kein Text wird hervorgehoben.
Ich benötige die Textauswahlfunktion. ohne es ist meine Speisekarte sinnlos.

Wie übersteuere ichonLongClick(View v), aber die von Android bereitgestellte Textauswahl beibehalten?
Wenn das nicht möglich ist, kann ich anrufenstartActionMode(mActionModeCallback) an einer anderen Stelle, damit der Text wie gewohnt ausgewählt wird, aber mein benutzerdefiniertes Menü auch angezeigt wird?
Wenn beides nicht möglich ist ... Hilfe.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage