2016-09-04 14 views
0

私はAndroid上でインプットメソッドを作成していますが、長押しのバックスペースキーを実装して、リリースなしで文字を1つずつ削除したいと考えています(デフォルト動作では、ソフトキーボードの長押しバックスペースはどのように機能しますか?

"KeyboardView"のサブクラスで "onLongPress"関数を "オーバーライド"し、コード "KEYCODE_DELETE"の長押しがトリガーされたときにdeleteをkeep deleteを呼び出してビューに送信します。私のコードは以下の通り:

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

私の質問は「それをやめる方法」です。どのようにバックスペースキーで長押しのリリースを追跡するには?または、長時間の削除を行う方法はありますか?

答えて

2

私はstudying.nの過程にあります。
これはうまくいくようですが、正しいのかどうかはわかりません。

android:isRepeatable="true"を使用してください。
onLongPressを使用する必要はありません。
onKeyは同じものとして機能します。

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> 

Javaクラス

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

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

そうだね、ありがとう!私はその基本的な知識をキャッチしていない... – Jason

+0

多くの検索の後、私は私のソリューションを見つけた、ありがとう。これが私の必要なものです。 – Dharmishtha

関連する問題