8

edittext と、SPACE が到着したかどうかを監視する textwatcher があります。スペースの場合は、すぐに削除したいと思います。または、スペースが表示されないようにする必要がありますが、スペースが許可されていないことをユーザーに何らかの方法で (seterror、toast) 示します。

edittext.addTextChangedListener(new TextWatcher() {

    public void afterTextChanged(Editable s) {

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

    public void onTextChanged(CharSequence s, int start, int before, int count) {}
        }); 

エラーが発生するため、afterTextChaned メソッドで onkeydown を定義できません。

 public boolean onKeyDown(int keyCode, KeyEvent event) {
                super.onKeyDown(keyCode, event);

                if (keyCode == KeyEvent.KEYCODE_SPACE) {

                }
    }

したがって、機能していません(構文エラー、int keyCode.

よろしくお願いします!

4

7 に答える 7

47

解決策は通常、はるかに簡単です。

@Override
public void afterTextChanged(Editable s) {
    String result = s.toString().replaceAll(" ", "");
    if (!s.toString().equals(result)) {
         ed.setText(result);
         ed.setSelection(result.length());
         // alert the user
    }
}

これは、以前の試みの問題を抱えているべきではありません。

于 2012-03-18T15:38:01.107 に答える
3

setSelectionあなたの最後にカーソルを再び設定するためにそこにありますEditText

editText.addTextChangedListener(new TextWatcher() {

                @Override
                public void onTextChanged(CharSequence cs, int arg1, int arg2,
                        int arg3) {}
                @Override
                public void beforeTextChanged(CharSequence s, int arg1, int arg2,
                        int arg3) {}
                @Override
                public void afterTextChanged(Editable arg0) {
                    if(editText.getText().toString().contains(" ")){ editText.setText(editText.getText().toString().replaceAll(" " , ""));
                    editText.setSelection(editText.getText().length());

                    Toast.makeText(getApplicationContext(), "No Spaces Allowed", Toast.LENGTH_LONG).show();
                    }
                }});
于 2016-03-29T15:55:17.767 に答える
2
boolean editclicked =false ;

edittext.addTextChangedListener(new TextWatcher() {
    public void afterTextChanged(Editable s) {
        editclicked = false ;
    }

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

    public void onTextChanged(CharSequence s, int start, int before, int count) {
        editclicked = true;
    }); 

これを別の関数として配置します。

public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (editclicked) {
        if (keyCode == KeyEvent.KEYCODE_SPACE) {
            return false
        }
    } else {
        super.onKeyDown(keyCode, event);
    }
}
于 2012-03-18T16:07:06.787 に答える
0

入力 Filter を使用してこれを実現するもう 1 つの簡単な方法

editText.setFilters(new InputFilter[]{new InputFilter() {
        @Override
        public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
            if (source.toString().equalsIgnoreCase(" ")){
                return "";
            }
            return source;
        }
    }});

これにより、ユーザーが入力したスペースがすぐに削除され、スペースが無効になっているように見えます。

于 2017-09-26T11:03:26.930 に答える