¿Alguien sabe cómo seleccionar texto en webview en android? no use emulateShiftHeld, ya que los documentos decían "Este método está en desuso"

Intento seleccionar texto en la vista web, después de seleccionar el texto, necesito decidir qué hacer a continuación. No solo copio el texto seleccionado. Tengo más opciones para que el usuario elija. Solicito un botón para obtener más información. Intenté usar emulateshiftheld para resolver mi problema, pero los documentos de Google decían "Este método está en desuso". Además, no puedo solicitar algún botón de elección. Puedes hacer clic en el enlace para ver a qué me refiero. Enlace: https://public.blu.livefilestore.com/y1pHhMR2iyIbQN7uJ2C-9CLLJBosWAZw2r4MvD0qyyTG-QWUM-06i6HFu4Fn4oaWnHMbDyTBOa-CPwN6PwoZNifSQ/select.jpg?download&psid=1

preguntado el 04 de julio de 12 a las 05:07

2 Respuestas

Pegar código relevante de WebView emulateShiftHeld () en Android SDK más nuevos

/**
 * Select Text in the webview and automatically sends the selected text to the clipboard
 */
public void selectAndCopyText() {
    try {
     KeyEvent shiftPressEvent = new KeyEvent(0,0,KeyEvent.ACTION_DOWN,KeyEvent.KEYCODE_SHIFT_LEFT,0,0);
     shiftPressEvent.dispatch(mWebView);
    } catch (Exception e) {
        throw new AssertionError(e);
    }
} 

Respondido 04 Jul 12, 06:07

Quiero que el usuario tenga la oportunidad de decidir qué hacer a continuación. A.copiar el texto seleccionado. B. compartir el texto seleccionado. así que necesito anular la devolución de llamada del texto seleccionado. - canción

La pregunta es muy antigua, pero para otras personas aquí hay una solución con javascript para API 19+. Simplemente agregue esto a su WebView:

public void getSelectedText(final SelectedTextInterface selectedTextInterface) {
    evaluateJavascript("(function(){return window.getSelection().toString()})()", new ValueCallback<String>() {
        @Override
        public void onReceiveValue(final String selectedText) {
            if (selectedText != null && !selectedText.equals("")) {
                //If you don't have a context, just call
                //selectedTextInterface.onTextSelected(selectedText);
                if (context instanceof Activity) {
                    ((Activity) context).runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            selectedTextInterface.onTextSelected(selectedText);
                        }
                    });
                } else selectedTextInterface.onTextSelected(selectedText);
            }
        }
    });
}

public interface SelectedTextInterface {
    void onTextSelected(String selectedText);
}    

Cuando haya terminado con la selección de texto, simplemente llámelo con:

webView.getSelectedText(new YourWebView.SelectedTextInterface() {
    @Override
    public void onTextSelected(String selectedText) {
        //Your code here
    }
});    

Espero que esto pueda ser útil para algunas personas :-)

Respondido el 06 de enero de 17 a las 10:01

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.