Неверное количество слов в строке в тексте редактирования - PullRequest
1 голос
/ 03 мая 2020

Я пытаюсь установить динамическое c слово на строку в механизме EditText, но система показывает мне 1 слово, когда я нажимаю на клавиатуре для новой строки.


My EditText

          <EditText
                android:id="@+id/note_content_edittext"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="@color/white"
                android:focusable="true"
                android:gravity="top|start"
                android:textSize="17sp"
                android:isScrollContainer="true"
                android:textAlignment="textStart"
                android:inputType="textMultiLine"/>

Прослушиватель событий:

          note_content_edittext.addTextChangedListener(new TextWatcher() {
                @Override
                public void beforeTextChanged(CharSequence s, int start, int count, int after) {}

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

                @Override
                public void afterTextChanged(Editable s) {}
            });

и функция wordPerLineNumber:

     private void wordPerLineNumber() {
        final String noteText = note_content_edittext.getText().toString();
        Layout layout = note_content_edittext.getLayout();

        int noteLineNumber = layout.getLineCount();
        int endIndex, wordNumberPerLine;

        StringBuilder text = new StringBuilder();


        for (int i = 0, startIndex = 0; i < noteLineNumber; i++) {
            endIndex = layout.getLineVisibleEnd(i);
            wordNumberPerLine = noteText.subSequence(startIndex, endIndex).toString().split(" ").length;

            text.append(wordNumberPerLine).append("\n");
            startIndex = endIndex;
        }

        line_number_textview.setText(text.toString()); // I show the result in a textView
    }

Я думаю, что моя проблема может быть связана с добавлением «\ r», когда я нажимаю на новую строку в моей клавиатуре, но я не знаю, как это исправить.

1 Ответ

1 голос
/ 03 мая 2020

Вы на правильном пути. Вы можете удалить все переводы строки \n из полученной строки. Просто добавьте .replace("\n", "") к wordPerLineNumber() методу.

Финальный код:

private void wordPerLineNumber() {
    final String noteText = editText.getText().toString();
    Layout layout = editText.getLayout();

    int noteLineNumber = layout.getLineCount();
    int endIndex, wordNumberPerLine;

    StringBuilder text = new StringBuilder();

    for (int i = 0, startIndex = 0; i < noteLineNumber; i++) {
        endIndex = layout.getLineVisibleEnd(i);
        String[] temp = noteText.subSequence(startIndex, endIndex).toString().trim().replaceAll("\n", "").split(" +");
        wordNumberPerLine = temp.length;
        if (temp.length != 0)
            if (temp[0].length() == 0)
                wordNumberPerLine--;
        text.append(wordNumberPerLine).append("\n");
        startIndex = endIndex;
    }

    textView.setText(text.toString());// I show the result in a textView
}

Кроме того, помните, что "".split(" ") возвращает 1, поэтому, возможно, вам нужно проверить пустую строку, если необходимо

...