1

Enterキーを押すとキーボードを削除するコードがあります。ここでの問題は、EditViewに新しい行が挿入されていることです。textviewからテキストを取得し、カートリッジの戻り値を削除しようとしました。しかし、それは機能しません。

コードは次のとおりです。

mUserName.setOnEditorActionListener(
    new android.widget.TextView.OnEditorActionListener()
    {
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event)
        {
            InputMethodManager imm = (InputMethodManager)getSystemService(
            Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(mUserName.getWindowToken(), 0);

            CharSequence c=v.getText();
            String h= c.toString();
            v.setText(h.replaceAll("\n",""));   

            return false;
        }
    }
);
4

2 に答える 2

1

まず、私はに依存しませんOnEditorActionListener。あなたが探していることをするためのより良い方法があります。私はあなたができる3つのことを提案します:

  • フィールドのIMEオプションを設定します。
  • 行数を1に設定します。
  • TextWatcher代わりに使用してください。(オプション、必須ではありません)

IMEオプションを設定するには(Enterボタンを削除します)、以下を使用します。

mUserName.setImeOptions(EditorInfo.IME_ACTION_NONE);

次に、行数を強制的に1にすることができます。

mUserName.setLines(1);
mUserName.setMaxLines(1);

これらのどちらも機能しない場合(必要な場合)、TextWatcher代わりにaを使用して改行を削除できます。

mUserName.addTextChangedListener(new TextWatcher() {
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        // Here, CHECK if it contains \r OR \n, then replaceAll
        // Checking is very important so you do not get an infinite loop
        if (s.toString().contains("\r") || s.toString().contains("\n")) {
            s = s.replaceAll("[\r|\n]", "");
            mUserName.setText(s);
        }
    }

    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        // Nothing
    }

    public void afterTextChanged(Editable s) {
        // Nothing
    }
});

この設定を少し試してみる必要があるかもしれません。replaceAll正規表現をテストしたり、コードを自分で実行したりはしていませんが、これは間違いなく出発点です。

于 2012-08-29T17:53:40.773 に答える
0

入力を1行のみに制限するには、次を使用します。

mUserName.setLines(1);
mUserName.setMaxLines(1);

または、mUserName.setSingleLine(true);

于 2012-08-29T17:55:23.760 に答える