我尝试在EditText中将每行动态单词放置到位,但是当我按键盘的新行时,系统显示1个单词。
我的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”,但我不知道该如何解决。
您走在正确的轨道上。您可以从结果字符串中删除所有换行符\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().replaceAll("\n", "").split(" ");
wordNumberPerLine = temp.length;
if (temp[0].length() == 0)
wordNumberPerLine = 0;
text.append(wordNumberPerLine).append("\n");
startIndex = endIndex;
}
textView.setText(text.toString());// I show the result in a textView
}
此外,请记住,"".split(" ")
返回1,所以如果需要,您可能需要检查一个空字符串
if (str.length() == 0)
wordNumberPerLine = 0