Deshabilitar el menú de selección contextual en el paso de peatones (cordova)

Deseo deshabilitar el menú contextual nativo que se muestra al seleccionar un texto, el que tiene los botones Seleccionar todo , Copiar , Compartir y Buscar . No obstante, no deseo desactivar las selecciones. Idealmente, me gustaría ampliar el menú en realidad, pero honestamente, estoy más que perfectamente bien con sólo desactivar. Con textfields y similares tiende a ser relativamente simple de la documentación que encontré, pero no puedo encontrar una manera de hacer que esto funcione con XWalkView / CordovaWebView . Podría ser que estoy buscando en completamente la esquina equivocada sin embargo.

Tengo una solución.

Para WebView hay una solución, pero no funciona para XWalkView :

Solución del menú de selección de WebView

Mi gradle incluye compile 'org.xwalk:xwalk_core_library:14.43.343.17'

Mi solución, la idea principal en el método onAttachedToWindow :

 public class XWalkWebView extends XWalkView { public XWalkWebView(Context context, AttributeSet attrs) { super(context, attrs); } private ActionMode.Callback mOriginalCallback; @Override protected void onAttachedToWindow() { super.onAttachedToWindow(); try { View innerChild = ((ViewGroup) getChildAt(0)).getChildAt(0); Field contentViewField = innerChild.getClass().getDeclaredField("mContentView"); contentViewField.setAccessible(true); XWalkContentView xWalkContentView = (XWalkContentView) contentViewField.get(innerChild); Field contentViewCoreField = xWalkContentView.getClass().getSuperclass().getDeclaredField("mContentViewCore"); contentViewCoreField.setAccessible(true); ContentViewCore viewCore = (ContentViewCore) contentViewCoreField.get(xWalkContentView); viewCore.setContainerView(this); } catch (NoSuchFieldException | IllegalAccessException e) { e.printStackTrace(); } } @Override public ActionMode startActionMode(ActionMode.Callback callback) { mOriginalCallback = callback; ActionMode.Callback c = new // your callback... return super.startActionMode(c); } } 

Intento la solución de Warabei pero no funciona en 15.44.384.13. Mejore para encontrar versiones cruzadas de ContentViewCore:

 public class XWalkWebView extends XWalkView { ... private Field getFields(Class clazz){ for(Field field:clazz.getDeclaredFields()){ if(ContentViewCore.class == field.getType()){ return field; } } clazz = clazz.getSuperclass(); if(clazz!=null && clazz!=Object.class){ Field field = getFields(clazz); if(field!=null)return field; } return null; } private void inject(View view){ Field field = getFields(view.getClass()); if(field!=null){ field.setAccessible(true); try { ContentViewCore viewCore = (ContentViewCore) field.get(view); viewCore.setContainerView(this); return; }catch(Exception e){ } } if(view instanceof ViewGroup){ ViewGroup viewGroup = (ViewGroup)view; int count = viewGroup.getChildCount(); for(int i = 0;i<count;i++){ inject(viewGroup.getChildAt(i)); } } } @Override protected void onAttachedToWindow() { super.onAttachedToWindow(); inject(this); } ... 

Para deshabilitar el menú de selección contextual:

 @Override public ActionMode startActionMode(ActionMode.Callback callback) { return new ActionMode() { @Override public void setTitle(CharSequence charSequence) { } @Override public void setTitle(int i) { } @Override public void setSubtitle(CharSequence charSequence) { } @Override public void setSubtitle(int i) { } @Override public void setCustomView(View view) { } @Override public void invalidate() { } @Override public void finish() { } @Override public Menu getMenu() { return null; } @Override public CharSequence getTitle() { return null; } @Override public CharSequence getSubtitle() { return null; } @Override public View getCustomView() { return null; } @Override public MenuInflater getMenuInflater() { return null; } }; } 

Este CSS debe evitar los menús contextuales tanto en Android como en IOS, como se indica en la plantilla cordova

 * { -webkit-tap-highlight-color: rgba(0,0,0,0); /* make transparent link selection, adjust last value opacity 0 to 1.0 */ } body { -webkit-touch-callout: none; /* prevent callout to copy image, etc when tap to hold */ -webkit-text-size-adjust: none; /* prevent webkit from resizing text to fit */ -webkit-user-select: none; /* prevent copy paste, to allow, change 'none' to 'text' */ } 
  • Botón personalizado en la barra de título del cuadro de diálogo
  • Cómo utilizar claves privadas desde el almacenamiento de Android
  • ¿Cómo utilizo un proyecto Java que requiere un nivel de cumplimiento de 1.7 en una ruta de construcción de proyecto de Android?
  • Botón My-Location de GoogleMaps v2 Android, no se muestra
  • Localización y eliminación de valores no referenciados en strings.xml
  • ¿Es posible ejecutar un servidor Tomcat y algunas aplicaciones web en un dispositivo Android? (es decir, un comprimido)
  • Android: No se llama a solicitud de petición de cadena de volea
  • NullPointerException intentando recuperar savedInstanceState con una matriz de clase personalizada
  • Detenga el subproceso Java que llama a la función JNI
  • ¿Cómo cambiar el comportamiento del método mediante la reflexión?
  • País, estado y ciudad spinner no funciona correctamente
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.