每次插入新行后Android get EditText行数

每次插入新行后Android get EditText行数,android,Android,通过下面的代码,我试图显示插入新行后的EditText行数,该代码仅适用于第一个新行,之后,对于EditText中的每个类型字符,我在LogCat上插入新行日志 editText.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Overrid

通过下面的代码,我试图显示插入新行后的
EditText
行数,该代码仅适用于第一个新行,之后,对于
EditText
中的每个类型字符,我在
LogCat
上插入新行日志

editText.addTextChangedListener(new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    }
    @Override
    public void onTextChanged(CharSequence text, int start, int before, int count) {
        if (-1 != text.toString().indexOf("\n")) {
            Log.e("new line ", "enter new line" + "");
        }
    }
    @Override
    public void afterTextChanged(Editable s) {
    }
});
试试这个

editText.addTextChangedListener(new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    }
    @Override
    public void onTextChanged(CharSequence text, int start, int before, int count) {
        String insertedString =  text.toString();
        if (text.length() > 0 && insertedString.substring(insertedString.length() - 1).equals("\n")) {
             Log.e("new line ", "enter new line " + (channelMessageBox.getLineCount() - 1));
        }
    }
    @Override
    public void afterTextChanged(Editable s) {
    }
});
试试这个

editText.addTextChangedListener(new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    }
    @Override
    public void onTextChanged(CharSequence text, int start, int before, int count) {
        String insertedString =  text.toString();
        if (text.length() > 0 && insertedString.substring(insertedString.length() - 1).equals("\n")) {
             Log.e("new line ", "enter new line " + (channelMessageBox.getLineCount() - 1));
        }
    }
    @Override
    public void afterTextChanged(Editable s) {
    }
});

您必须计算换行代码:

int counter = 0;

editText.addTextChangedListener(new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    }
    @Override
    public void onTextChanged(CharSequence text, int start, int before, int count) {
        if(before==0) {
            counter = 0;
            for (int i = 0; i < text.toString().length(); i++) {
                if (text.toString().charAt(i) == '\n') {
                    counter++;
                }
            }
        }
        Log.e("total new line ", "counter: " + counter);
    }
    @Override
    public void afterTextChanged(Editable s) {
    }
});
int计数器=0;
editText.addTextChangedListener(新的TextWatcher(){
@凌驾
更改前文本之前的公共void(字符序列s、int start、int count、int after){
}
@凌驾
public void onTextChanged(字符序列文本、int start、int before、int count){
如果(之前==0){
计数器=0;
对于(int i=0;i
您必须计算换行代码:

int counter = 0;

editText.addTextChangedListener(new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    }
    @Override
    public void onTextChanged(CharSequence text, int start, int before, int count) {
        if(before==0) {
            counter = 0;
            for (int i = 0; i < text.toString().length(); i++) {
                if (text.toString().charAt(i) == '\n') {
                    counter++;
                }
            }
        }
        Log.e("total new line ", "counter: " + counter);
    }
    @Override
    public void afterTextChanged(Editable s) {
    }
});
int计数器=0;
editText.addTextChangedListener(新的TextWatcher(){
@凌驾
更改前文本之前的公共void(字符序列s、int start、int count、int after){
}
@凌驾
public void onTextChanged(字符序列文本、int start、int before、int count){
如果(之前==0){
计数器=0;
对于(int i=0;i
您将获得每个字符的新行
indexOf(“\n”)
总是返回一些值,因为如果出现第一个新行。然后在该文本中出现一个新行,您将为每个字符获得新行
indexOf(“\n”)
总是返回一些值,因为如果出现第一个新行。然后在那个文本中出现了一个新行,当然它不起作用了。他根本没读你的问题。使用此代码,您将计算第一行,然后它将停止。只要数一数\n个字符,你就可以开始了,而不是寻找索引。@Amy请将
/n
更改为
\n
,现在如何获得行数?@Amy我将你的代码更新为:
if(text.length()>0&&insertedString.substring(insertedString.length()-1)。等于(“\n”){Log.e(“新行”,“输入新行”+(channelMessageBox.getLineCount()-1));}
当然不起作用。他根本没有读你的问题。有了这个代码,你会数一数第一行,然后它就会停止。只需数一数\n个字符,你就可以开始了,而不是寻找索引。@Amy请将
/n
更改为
\n
,现在如何获得行数?@Amy我将你的代码更新为:
如果(text.length()>0&&insertedString.substring(insertedString.length()-1).equals(“\n”){Log.e(“新行”,“输入新行”+(channelMessageBox.getLineCount()-1));}
这不是一个好的解决方案,因为对于每个键入字符,您都必须检查它OK。我正在尝试给您更好的解决方案。:)我尝试了几种解决方案,但最终得到了这个解决方案。我只是编辑了我的答案,这是一个更优化的解决方案。@tux world这不是一个好的解决方案,因为对于每个键入字符,你都必须检查它。好的。我试图给你更好的解决方案。:)我尝试了几种解决方案,但最终得到了这个解决方案。我只是编辑我的答案,这是更优化@晚礼服世界