Verwenden Sie eine benutzerdefinierte contextual action bar für die WebView-text-Auswahl

Habe ich verwendet diese Anleitung von Google und dieses tutorial zu produzieren, meine eigenen contextual action bar.

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

In diesem Menü ist entworfen, um angezeigt, wenn der Benutzer markiert den text, so überschreibt es die native kopieren/einfügen-Menü. Jetzt komme ich zu meinem Problem.

Weil ich bin übergeordnete Funktionen für Textauswahl, ich habe auch einen LongClickListener zu einem WebView und implementiert die onLongClick(View v) Methode, so kann ich erkennen, wenn der 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 auf, ich sehe meine benutzerdefinierte Menü angezeigt, aber kein text markiert ist.
Ich muss die text-Auswahl-Funktionen; ohne es, mein Menü ist sinnlos.

Wie kann ich überschreiben onLongClick(View v)aber halten Sie die text-Auswahl zur Verfügung gestellt von Android?
Wenn das nicht möglich ist, kann ich den Aufruf zu startActionMode(mActionModeCallback) woanders, so dass text ausgewählt werden, als normal, aber mein benutzerdefiniertes Menü auch angezeigt werden?
Wenn keines von beidem möglich sind... Hilfe.

InformationsquelleAutor der Frage Dirty Beach | 2014-03-11

Schreibe einen Kommentar