0

ユーザーが(スクリーンキーボードの)「DEL」キーをクリックしたときのアクションを変更しようとしています。コードは次のとおりです

ed.setOnKeyListener(new View.OnKeyListener() {
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            if (keyCode == KeyEvent.KEYCODE_DEL) {
                if(contadorcor == 0){
                    String output = correctOutput(String.valueOf(ed.getText()));
                    ed.setText(output);
                    ed.setSelection(num);
                    contadorcor++;
                }
            }
            contadorcor = 0;
            return false;
        }
    });

public static String correctOutput(String s) {
    String input = s;
    int pos = 0;
    for (int i = 0; i < input.length(); i++) {
            if(input.charAt(i) != ' ') {
            if(input.charAt(i) != '_') {
                pos = i;
            }
        }
    }
    String output = "";
    for (int i = 0; i < input.length(); i++) {
        if(i != pos) {
            output = output + String.valueOf(input.charAt(i));
        } else {
            output = output + "_";
        }
    }
    num = num - 2;
    return output;
}

なぜ私がこれを行うのかを理解するには、「_ _ _ _ _ _ _ .....」のような未知の単語があり、ユーザーが文字を推測しようとして文字を削除すると、「THISIK |_ _ ... "そして「K」を修正したいのですが、カーソルが次の「アンダースコア」の先頭にある場合は、「k」を削除して「アンダースコア」に置き換えてから、そこにカーソルを置きます。「これ |_ _ _ _ ....」

しかし、削除キーを押すと、このアクションが2回行われ、2文字が削除されます。それがキーダウンとキーアップをキャプチャしていると思いますが、それが繰り返される理由ですが、修正方法がわかりません。ある種のカウンターを作ろうとしましたが、それも機能していません

前もって感謝します。

4

1 に答える 1

2

onKey メソッドには、引数 event があります。次のことができます。

if(event.getAction()==KeyEvent.ACTION_UP){
...
}
else if(event.getAction()==KeyEvent.ACTION_DOWN){
...
}
于 2013-02-13T11:50:16.663 に答える