0

イントロ:私は現在EditText、クロスワードパズルの入力メソッドを実装しようとしています。ユーザーにはのようなものが表示"____"されEditTextます。アンダースコアは欠落している文字を示し、最初に入力された文字が最初のアンダースコアを埋めます。もちろん、パズルの他のセルはすでに解決されている可能性があるため、EditTextテキストはである可能性があります"ST_CKOV_RF_OW"。このすべての機能は、オーバーライドされたビューのサブクラスである自分の入力ビューにすでにありましたonDraw()。これはかなりうまく機能しましたが、一部のAndroidバージョンではビューが表示されず、Backキーが入力ルーチンをすり抜けてアクセスできませんでした。

EditTextだから、私はそれを使って、実装して、うまくいくと思いましたがTextWatcher、正しく動作させることができません。私が今持っているものは機能しています。キーボードを使用して文字を入力できますが、Backspaceが機能していません。もちろん、ユーザーがEditTextその位置に触れると、混乱します。

public void beforeTextChanged(CharSequence s,int start,int count, int after){
                    et.removeTextChangedListener(textWatcher);
                    int position = text.indexOf("_");
                    if(position==-1) onAnswerEntered(et.getText().toString().replace("_", "")); //finished
                    else {
                        et.setSelection(et.getText().toString().indexOf("_"));
                        et.addTextChangedListener(textWatcher);
                    }
                } 


public void onTextChanged(CharSequence s, int start, int before, int count) {
                    et.removeTextChangedListener(textWatcher);
                    try {                   
                        String currentKey = s.toString().substring(start, start+1);
                        Logger.log("Current Key", currentKey);

                        int position = text.indexOf("_");
                        Logger.log("Current Position _ ", position+"");

                        //replace _ with key
                        String sbefore=text.substring(0, position);
                        String safter=text.substring(position+1, text.length());
                        text=sbefore+currentKey+safter;

                        int positionNext = text.indexOf("_");
                        Logger.log("Next Position _ ", positionNext+"");

                        if(positionNext==-1) onAnswerEntered(et.getText().toString().replace("_","")); //finished
                        else {
                            et.setText(text);
                            et.setSelection(et.getText().toString().indexOf("_"));
                            et.addTextChangedListener(textWatcher);
                        }


                    } catch(IndexOutOfBoundsException ioobe) {
                        ioobe.printStackTrace();
                    }

                }

も設定しようとしましたOnKeyListenerが、機能しませんEditText(バックスペースイベントを取得できますが、他には何もありません)

ですから、私は完全に間違った方向に進んでいるのかもしれませんが、私を助けて、私がどのように私の目標を達成できるかについての手がかりを与えてください。ありがとう。

4

1 に答える 1

0

私はそれをあきらめて、シンプルだが機能する種類のハックを実装しました。(非表示の)EditTextで入力を受け取り、出力は目に見えるTextViewに送られ、その間の関数がEditTextからの入力で「_」を埋めます。元。

ヒント = "A_A_A_A" edittext input = "BBB" textview には "ABABABA" と表示されます

于 2013-01-23T11:49:08.370 に答える