2016-09-04 4 views
0

Je crée une méthode de saisie sur Android, et je veux mettre en œuvre la touche de retour arrière pour supprimer les caractères un par un sans les relâcher (je pense que le comportement par défaut est de supprimer un caractère). Ma solution actuelle est de "remplacer" la fonction "onLongPress" dans ma sous-classe de "KeyboardView", et d'appeler une suppression continue pour envoyer une action de suppression à la vue lorsque le long appui sur le code "KEYCODE_DELETE" a été déclenché . Comme mes codes ci-dessous:Comment fonctionne le backspace du clavier logiciel?

@Override 
protected boolean onLongPress(Key key) { 
    if (key.codes[0] == Keyboard.KEYCODE_DELETE) { 
     final Handler h = new Handler(); 
     final int delay = 500; 
     h.postDelayed(new Runnable() { 
      public void run() { 
       h.postDelayed(this, delay); 
       getOnKeyboardActionListener().onKey(Keyboard.KEYCODE_DELETE, null); 
      } 
     }, delay); 
     return true; 
    } else { 
     return super.onLongPress(key); 
    } 
} 

Alors, ma question est "comment l'arrêter?" comment suivre la libération de la pression longue sur la touche de retour arrière? Ou y a-t-il un moyen de faire disparaître la longue presse?

Répondre

2

Je suis en train d'étudier.n
Cela semble fonctionner mais je ne suis pas sûr que ce soit correct.

Utilisez android:isRepeatable="true".
Vous n'avez pas besoin d'utiliser onLongPress.
onKey fonctionne de la même manière.

xml

<?xml version="1.0" encoding="utf-8"?> 
<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" 
      android:horizontalGap="0px" android:verticalGap="0px" 
      android:keyWidth="100%p" android:keyHeight="70dp"> 
    <Row> 
     <Key android:codes="-5" android:keyIcon="@drawable/ic_action_name" android:isRepeatable="true"> 
    </Row> 
</Keyboard> 

classe java

@Override 
public void onKey(int primaryCode, int[] keyCodes) { 
    InputConnection ic = getCurrentInputConnection(); 

    switch(primaryCode) { 
     case Keyboard.KEYCODE_DELETE: 
      ic.deleteSurroundingText(1, 0); 
      break; 
    } 
} 
+0

Vous avez raison, merci! Je n'ai pas pris cette connaissance de base ... – Jason

+0

Après de nombreuses recherches, j'ai trouvé ma solution, merci beaucoup. c'est ce dont j'ai besoin. – Dharmishtha