2014-10-22 3 views
5

Ich wünsche dem nativen Kontextmenü zu deaktivieren, die angezeigt wird, wenn Sie einen Text auswählen, der mit dem alle wählen, Kopie, Aktien und Suche Tasten . Ich möchte jedoch die Auswahl nicht selbst deaktivieren. Idealerweise würde ich das Menü eigentlich erweitern wollen, aber ehrlich gesagt, es ist mehr als in Ordnung, es einfach zu deaktivieren. Bei Textfeldern und ähnlichem ist es aus der Dokumentation, die ich gefunden habe, relativ einfach, aber ich kann einfach nicht herausfinden, wie dies mit XWalkView/CordovaWebView funktioniert. Mag sein, dass ich nur in der falschen Ecke suche.Disable Kontextauswahlmenü in Überweg (cordova)

+0

So ... Wer Pflege zu erklären, warum dies eine Downvote bekam? –

+0

Konnten Sie das jemals lösen? –

+0

@Kufuma Leider nein, sogar eine Prämie von 50 darauf, aber es wurde ignoriert :( –

Antwort

-2

Diese CSS sollte Kontextmenüs in Android und IOS verhindern, wie sie in der cordova Vorlage

gegeben
* { 
-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' */ 
} 
+0

"Ich möchte die Selektionen jedoch nicht selbst deaktivieren." –

1

Ich habe eine Abhilfe.

Für WebView gibt es eine Lösung, aber es funktioniert nicht für XWalkView:

WebView selection menu workaround

Mein gradle compile 'org.xwalk:xwalk_core_library:14.43.343.17'

Meine Lösung umfasst, die Hauptidee in der onAttachedToWindow Methode:

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); 
    } 

} 
0

Ich versuche Warabeis Lösung aber es nicht am 15.44.384.13 arbeiten. Ich Verbesserung ContentViewCore Cross-Versionen zu finden:

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); 
    } 
    ... 

Um Kontextauswahlmenü zu deaktivieren:

@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; 
     } 
    }; 
}