sitio - version escritorio android
Cómo obtener el texto seleccionado de la vista web en Anulación de ActionMode (1)
La única forma de obtener una selección de texto de un WebView
se basa en JavaScript. Esto no es específico del modo de acción, así es como se supone que la selección de texto de WebView
debe ser recuperada de acuerdo con el punto de vista de los desarrolladores de WebView
. Deliberadamente decidieron no proporcionar una API para acceder a la selección de texto de Java.
La solución comprende 2 enfoques.
Con Android API> = 19 puedes usar evaluateJavascript
:
webview.evaluateJavascript("(function(){return window.getSelection().toString()})()",
new ValueCallback<String>()
{
@Override
public void onReceiveValue(String value)
{
Log.v(TAG, "SELECTION:" + value);
}
});
En compilaciones más antiguas, su único recurso es una interfaz de JavaScript personalizada con un único método que acepta String
, al que debe llamar a través de webview.loadUrl
pasando el mismo webview.loadUrl
:
webview.loadUrl("javascript:js.callback(window.getSelection().toString())");
donde js
es la interfaz de javascript adjunta:
webview.getSettings().setJavaScriptEnabled(true);
webview.addJavascriptInterface(new WebAppInterface(), "js");
y
public class WebAppInterface
{
@JavascriptInterface
public void callback(String value)
{
Log.v(TAG, "SELECTION:" + value);
}
}
Estoy agregando algunos elementos de menú personalizados en el menú de acción contextual. Necesito dar una función de búsqueda web con las palabras seleccionadas en WebView.
Anulo el ActionMode usando este código.
@Override
public void onActionModeStarted(ActionMode mode) {
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
if (mActionMode == null) {
mActionMode = mode;
Menu menu = mode.getMenu();
mode.getMenuInflater().inflate(R.menu.menu_search, menu);
}
}
super.onActionModeStarted(mode);
}
public void onContextualMenuItemClicked(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_search:
//HERE I WANT TO GET THE TEXT: HOW CAN I?
break;
}
if (mActionMode != null) {
mActionMode.finish();
}
}
Quiero buscar en mi sitio usando la palabra seleccionada por el usuario en la vista web, pero no puedo obtener el texto seleccionado. ¿Cómo podría conseguir eso, alguien por favor ayuda?
Gracias por adelantado.