在我的项目中,我有一个EditText。我想在EditText中计算字符,并在TextView中显示该数字。我写了下面的代码,它工作得很好。然而,我的问题是,当我点击退格它计数,但我需要减少的数字。我如何考虑退格?

tv = (TextView)findViewById(R.id.charCounts);
textMessage = (EditText)findViewById(R.id.textMessage);
textMessage.addTextChangedListener(new TextWatcher(){
    public void afterTextChanged(Editable s) {
        i++;
        tv.setText(String.valueOf(i) + " / " + String.valueOf(charCounts));
    }
    public void beforeTextChanged(CharSequence s, int start, int count, int after){}
    public void onTextChanged(CharSequence s, int start, int before, int count){}
}); 

当前回答

这是一个略显笼统的答案,为以后的观众提供更多解释。

添加一个文本更改的侦听器

如果希望在文本更改后查找文本长度或执行其他操作,可以将文本更改侦听器添加到编辑文本中。

EditText editText = (EditText) findViewById(R.id.testEditText);
editText.addTextChangedListener(new TextWatcher() {

    @Override
    public void beforeTextChanged(CharSequence charSequence, int start, int count, int after) {

    }

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

    }

    @Override
    public void afterTextChanged(Editable editable) {

    }
});

监听器需要一个TextWatcher,它需要覆盖三个方法:beforeTextChanged、onTextChanged和afterTextChanged。

数字符

你可以在onTextChanged或beforeTextChanged with中获取字符计数

charSequence.length()

或在afterTextChanged with

editable.length()

方法的意义

这些参数有点让人困惑所以这里有一点额外的解释。

beforeTextChanged

beforeTextChanged(CharSequence CharSequence, int start, int count, int after)

charSequence:这是挂起更改之前的文本内容。你不应该试图改变它。 start:这是新文本将要插入的位置的索引。如果选择了一个范围,那么它是范围的开始索引。 count:这是将要被替换的所选文本的长度。如果没有选择,则count将为0。 After:这是要插入的文本的长度。

onTextChanged

onTextChanged(CharSequence CharSequence, int开始,int之前,int计数)

charSequence:这是更改后的文本内容。您不应该尝试在这里修改这个值。如果需要,修改afterTextChanged中的可编辑文件。 start:这是插入新文本的起始位置的索引。 before:旧值。它是先前被替换的选定文本的长度。这与beforeTextChanged中的count值相同。 count:这是插入的文本长度。这与beforeTextChanged中的after值相同。

afterTextChanged

afterTextChanged(可编辑的编辑)

像onTextChanged一样,它在更改已经完成后被调用。但是,现在文本可能会被修改。

editable:这是EditText的可编辑文本。如果你改变它,你必须小心不要进入一个无限循环。有关详细信息,请参阅文档。

这个答案的补充图像

其他回答

如何只是得到你的编辑文本的字符长度并显示它?

类似于

tv.setText(s.length() + " / " + String.valueOf(charCounts));

Use

s.length()

以下是曾经在一个回答中提出的,但是效率很低

textMessage.getText().toString().length()

在你的代码中有一些变化:

TextView tv = (TextView)findViewById(R.id.charCounts);
textMessage = (EditText)findViewById(R.id.textMessage);
textMessage.addTextChangedListener(new TextWatcher(){
    public void afterTextChanged(Editable s) {
        tv.setText(String.valueOf(s.toString().length()));
    }
    public void beforeTextChanged(CharSequence s, int start, int count, int after){}
    public void onTextChanged(CharSequence s, int start, int before, int count){}
}); 

TextWatcher maritalStatusTextWatcher = new TextWatcher() { @Override public void beforeTextChanged(CharSequence CharSequence, int i, int i1, int i2) {

    }

    @Override
    public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
        try {
            if (charSequence.length()==0){
                topMaritalStatus.setVisibility(View.GONE);
            }else{
                topMaritalStatus.setVisibility(View.VISIBLE);
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    @Override
    public void afterTextChanged(Editable editable) {

    }
};

这是一个略显笼统的答案,为以后的观众提供更多解释。

添加一个文本更改的侦听器

如果希望在文本更改后查找文本长度或执行其他操作,可以将文本更改侦听器添加到编辑文本中。

EditText editText = (EditText) findViewById(R.id.testEditText);
editText.addTextChangedListener(new TextWatcher() {

    @Override
    public void beforeTextChanged(CharSequence charSequence, int start, int count, int after) {

    }

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

    }

    @Override
    public void afterTextChanged(Editable editable) {

    }
});

监听器需要一个TextWatcher,它需要覆盖三个方法:beforeTextChanged、onTextChanged和afterTextChanged。

数字符

你可以在onTextChanged或beforeTextChanged with中获取字符计数

charSequence.length()

或在afterTextChanged with

editable.length()

方法的意义

这些参数有点让人困惑所以这里有一点额外的解释。

beforeTextChanged

beforeTextChanged(CharSequence CharSequence, int start, int count, int after)

charSequence:这是挂起更改之前的文本内容。你不应该试图改变它。 start:这是新文本将要插入的位置的索引。如果选择了一个范围,那么它是范围的开始索引。 count:这是将要被替换的所选文本的长度。如果没有选择,则count将为0。 After:这是要插入的文本的长度。

onTextChanged

onTextChanged(CharSequence CharSequence, int开始,int之前,int计数)

charSequence:这是更改后的文本内容。您不应该尝试在这里修改这个值。如果需要,修改afterTextChanged中的可编辑文件。 start:这是插入新文本的起始位置的索引。 before:旧值。它是先前被替换的选定文本的长度。这与beforeTextChanged中的count值相同。 count:这是插入的文本长度。这与beforeTextChanged中的after值相同。

afterTextChanged

afterTextChanged(可编辑的编辑)

像onTextChanged一样,它在更改已经完成后被调用。但是,现在文本可能会被修改。

editable:这是EditText的可编辑文本。如果你改变它,你必须小心不要进入一个无限循环。有关详细信息,请参阅文档。

这个答案的补充图像