Android 中的 TextWatcher

TextWatcher in Android

我有一个最大支持字符为 10 的 EditText。我想要的是当我键入时计数应该递减并且在退格时计数应该递增.....

private static TextView messageCount=null;
messageCount=(TextView) findViewById(R.id.messageCount);

mMessageField.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
        }
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
        }
        @Override
        public void afterTextChanged(Editable s) {

            if(count>0)
            {
                count--;
                messageCount.setText("Count=>"+count);
                //Toast.makeText(mContext, "Count=>"+count, Toast.LENGTH_LONG).show();
            }               
        }
    });

尝试这样的事情:

 @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) {

    int count1 = 10 - mMessageField.getText().toString().length();
    messageCount.setText("Count=>"+String.valueOf(count1));

    }

它会告诉你文本视图的长度。将其放在 "onTextChanged" 中,这样长度会根据您输入或删除的文本而增加或减少。

请检查下面更新的代码。

private static TextView messageCount=null;
messageCount=(TextView) findViewById(R.id.messageCount);

mMessageField.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
        }
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
        }
        @Override
        public void afterTextChanged(Editable s) {

            if(mMessageField.getText().toString().length <=10)
            {
                 if(count>0)
            {
               count =  10 - mMessageField.getText().toString().length();
                messageCount.setText("Count=>"+count);
                //Toast.makeText(mContext, "Count=>"+count, Toast.LENGTH_LONG).show();
            }          
            }else{
Toast.makeText(mContext, "You can enter maximum 10 character", Toast.LENGTH_LONG).show();

        }
    });

如果对你有帮助,请告诉我。

遗憾的是,据我所知,软键盘上的退格键不是您可以捕捉或响应的事件。

我能想到的最好的方法是创建一个整数值来保存 "afterTextChanged" 上的当前文本长度。

然后,每次你到达 afterTextChanged 时,你都会将新值与旧值进行比较,如果它的值低于之前的值,那么你按下退格键,如果它更大,那么用户可能键入了一个键。