Pregunta

Se sabe que es difícil Para obtener el texto seleccionado en una vista web porque la selección de texto de WebView en realidad es manejada por una clase privada, WebTextView.

Sin embargo, con el recientemente lanzado Pautas de diseño de Android 4.0, parece haber un rayo de esperanza de lograr esto a través de barras de acción contextuales (CAB). Eso dice:

Use CABE siempre que permita al usuario seleccionar datos a través de Long Press. Puede controlar el contenido de acción de una cabina para insertar las acciones que desea que el usuario pueda realizar.

¿Estoy malinterpretando esto? ¿Hay alguna forma de recuperar el texto seleccionado de una WebView a través de un taxi?

Después de que comience un modo largo y selección de texto, actualmente puedo detectar cuándo el ActionMode inicia y modifica la copia/pasta original Menu; Sin embargo, no puedo descubrir cómo recuperar realmente el texto seleccionado.

¿Fue útil?

Solución

Todavía no puedes hacer eso con la API actual.

Presenté una solicitud de función para esto: número 24841: WebView debería permitir que las aplicaciones proporcionen una barra de acción contextual personalizada http://code.google.com/p/android/issues/detail?id=24841

Básicamente, WebView en 4.0 ha codificado su propia barra de acción contextual (CAB). Ese CAB tiene una referencia de regreso a WebView y con esa referencia, puede obtener el texto seleccionado. No estoy seguro de cómo pudo detectar el inicio de ActionMode y modificar el menú, pero si pudo hacer todo eso, entonces está atascado porque getSelection () es el paquete-privado actualmente. Presenté eso como un problema separado y lo vinculé al problema anterior anterior.

Otros consejos

Puede usar JavaScript para obtener el texto seleccionado: Window.getSelection () y usar la función AddJavaScriptIntInter de WebView para devolver el resultado.

Gracias por su información, he resuelto un problema difícil. Solo quiero agregar alguna función al modo de acción. El siguiente es mi código, puede ser útil para otros.

@Override
public ActionMode onWindowStartingActionMode(Callback callback) {
    // TODO Auto-generated method stub
    ActionMode mode = super.onWindowStartingActionMode(callback);
    mode.getMenuInflater().inflate(R.menu.actions, mode.getMenu());
    mode.getMenu().findItem(R.id.action_add).setOnMenuItemClickListener(new OnMenuItemClickListener() {

        @Override
        public boolean onMenuItemClick(MenuItem item) {
            // TODO Auto-generated method stub
            Log.i("", "onMenuItemClick add ");
            return false;
        }
    });
    return mode;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top