2009-07-10 9 views
6

Le navigateur fait cela en appelant la méthode public void emulateShiftHeld() sur le WebView qui est caché dans le SDK.
D'autres options?Sélectionner du texte dans un WebView?

+0

hey vous avez la solution à votre problème? – vnshetty

+0

cette solution ne fonctionne pas ICS –

Répondre

8

De la classe qui étend WebView:

public void selectAndCopyText() { 
    try { 
     Method m = WebView.class.getMethod("emulateShiftHeld", null); 
     m.invoke(this, null); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     // fallback 
     KeyEvent shiftPressEvent = new KeyEvent(0,0, 
      KeyEvent.ACTION_DOWN,KeyEvent.KEYCODE_SHIFT_LEFT,0,0); 
     shiftPressEvent.dispatch(this); 
    } 
} 

Et puis vous devez utiliser ClipboardManager pour surveiller le nouveau texte.

Fonctionne sur Android 1.5 - 2.3. emulateShiftHeld() rendu public depuis le 2.2.

+0

Tant que l'utilisateur "coopère" en ** manuellement ** en sélectionnant le texte. Voir http://stackoverflow.com/questions/5250290/why-doesnt-this-motionevent-simulation-work –

+0

Sous Anroid 4.0.3 m.invoke (webView, null) provoque un crash natif 09-21 23: 20: 49.151: A/libc (4103): Fatal signal 11 (SIGSEGV) à 0x00000014 (code = 1) –

+0

Désolé, je ne comprends pas .. J'ai ajouté selectAndCopyText() dans ma classe qui étend WebView, mais où puis-je appeler cela fonction pour permettre au texte dans WebView d'être sélectionnable? – Bruce

3

Ce fragment de code fait exactement la même chose que emulateshiftheld(). Il permet à l'utilisateur de sélectionner du texte. Puis le copie automatiquement dans le presse-papiers.

 KeyEvent shiftPressEvent = new KeyEvent(0,0, 
       KeyEvent.ACTION_DOWN,KeyEvent.KEYCODE_SHIFT_LEFT,0,0); 
      shiftPressEvent.dispatch(portal); 
Questions connexes