sobre - Anulación de la barra de acción contextual predeterminada para la selección de texto(en WebView) en Android
manual de programacion android (2)
He podido resolver esto. También me enfrenté a este problema y no pude encontrar ninguna solución en la web.
Por lo tanto, si configura un oyente LongClick, la vista web dejará de mostrar la selección. Después de profundizar en el código de Webview, descubrí que estaba llamando al método startRunMode de WebView y que pasaba una instancia de la clase SelectActionCallbackMode.
Simplemente extendí la clase Webview y anulé el método startRunMode de esta manera:
public ActionMode startActionMode(ActionMode.Callback callback)
{
actionModeCallback = new CustomizedSelectActionModeCallback();
return super.startActionMode(actionModeCallback);
}
Esto obligó a la vista web a mostrar mi devolución de llamada en lugar de mostrar la predeterminada de webview. Esto aseguró que la selección funcionara tan bien como antes y mi CAB se mostrara cada vez que se hizo la selección. La única advertencia fue que tuve que escribir un código para despedir al CAB yo mismo.
Probado en dispositivos 4.1, 4.2 y 4.3.
Espero que esto ayude.
Quiero anular la barra de acción contextual (CAB) predeterminada existente para la selección de texto. Quiero decir, quiero mostrar mi propia CAB, con mis propios botones, cuando se selecciona algún texto en la vista web. Intenté implementar un CAB usando la documentación de Android. OnLongClickListener no captura el evento de selección de texto en la vista web. ¿Cuál es el evento que captura la selección de texto? ¿Es posible ocultar el CAB predeterminado y mostrar mi CAB en la selección de texto?
childWebView.setOnLongClickListener(new OnLongClickListener() {
@Override
// Called when the user long-clicks on someView
public boolean onLongClick(View view) {
if (mActionMode != null) {
return false;
}
// Start the CAB using the ActionMode.Callback defined above
mActionMode = startActionMode(mActionModeCallback);
view.setSelected(true);
return true;
}
});
La selección de documentación oficial | Los desarrolladores de Android señalan que:
Selección de acciones CAB
Puede decidir qué acciones y elementos aparecen en el CAB. Use las pautas en el patrón de la barra de acción para decidir qué elementos emergerán en el nivel superior y cuáles se moverán al desbordamiento de acción.
Ajustar dinámicamente las acciones CAB En la mayoría de los casos, es necesario ajustar las acciones en el CAB dinámicamente a medida que el usuario agrega más elementos a la selección. Las acciones que se aplican a un único elemento de datos seleccionado no se aplican necesariamente a múltiples elementos de datos seleccionados del mismo tipo.
Desafortunadamente, el enlace incluido en la cita enlaza a una sección que también contiene información general sin entrar en detalles. Para empeorar las cosas, se enlaza nuevamente a la Selección | Página de desarrolladores Android .
Mirando un poco más, encontré este tutorial de Lars Vogel. Cito (formateando el mio):
Un modo de acción contextual activa una
ActionBar
acción temporal que se superpone a laActionBar
deActionBar
de la aplicación durante la duración de una subtarea en particular.El modo de acción contextual normalmente se activa al seleccionar un elemento o al hacer un clic largo en él.
Para implementar esto, llame al método
startActionMode(
) en una vista o en su actividad. Este método obtiene un objetoActionMode.Callback
que es responsable del ciclo de vida de laActionBar
contextual.También puede asignar un menú contextual a una
View
través del métodoregisterForContextMenu(view)
. También se activa un menú contextual si el usuario "presiona prolongadamente" la vista. SeonCreateContextMenu()
métodoonCreateContextMenu()
cada vez que se activa un menú de contexto, ya que el menú de contexto se descarta después de su uso. Debería preferir el modo de acción contextual sobre el uso de menús contextuales.
La referencia más prominente menciona que podemos crear nuestro propio menú usando registerForContextMenu(view)
. En lugar de duplicar una respuesta, encontré esta respuesta de J. Pablo Fernández, que contiene un ejemplo de código sobre cómo aplicar su propio CAB. El registro de un nuevo menú contextual debería anular cualquier menú predeterminado, pero no estoy seguro. Como no puedo probar esto en este momento, me alegraría saber si esto resolvió su problema.