Android 使用bulletspan时不直接换行
我已经试着解决我的问题两天了,但是没有成功 问题是:当我将BulletSpan设置为text,然后在EditText中显示它时,一切正常,直到我开始键入另一个文本。当文本在屏幕的末尾被包装时,缩进工作,但光标指向实际位置,并且在光标后添加上一行的一些字符。要更好地说明此问题,请参见所附图像 另外值得一提的是,只有当我输入文本时才会发生这种情况,当我在源代码中设置文本时,文本太长,不能只在一行上,换行工作正常,没有添加额外的字符,光标位置也不正确 我也试着领导马金斯潘。斯坦德和他的行为是一样的 在代码中,我正在设置开始标记:Android 使用bulletspan时不直接换行,android,text,textedit,spannablestring,Android,Text,Textedit,Spannablestring,我已经试着解决我的问题两天了,但是没有成功 问题是:当我将BulletSpan设置为text,然后在EditText中显示它时,一切正常,直到我开始键入另一个文本。当文本在屏幕的末尾被包装时,缩进工作,但光标指向实际位置,并且在光标后添加上一行的一些字符。要更好地说明此问题,请参见所附图像 另外值得一提的是,只有当我输入文本时才会发生这种情况,当我在源代码中设置文本时,文本太长,不能只在一行上,换行工作正常,没有添加额外的字符,光标位置也不正确 我也试着领导马金斯潘。斯坦德和他的行为是一样的
private void handleListStart(SpannableStringBuilder text) {
int len = text.length();
text.setSpan(new ListItem(), len, len, Spannable.SPAN_MARK_MARK);
}
然后设置跨度:
private void handleListEnd(SpannableStringBuilder text) {
int len = text.length();
Object obj = getLast(text, ListItem.class);
int where = text.getSpanStart(obj);
text.removeSpan(obj);
if (where != len) {
text.setSpan(new BulletSpan(listIndent * 15), where, len, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
}
}
我从xml文件中获取数据
谢谢你的帮助
编辑:
我忘了补充一点,我在安卓4.1和4.4上试过这个,它们的行为都是一样的当你的bulletspan样式的字符出现新行时,就会出现这个问题 您可以在线条增加时收听,然后清除bulletspan并再次设置新的bulletspan
上述解决方案对我非常有效。@QuinnChen的答案对我很有效。为了方便起见,让我用代码详细说明一下。 当文本自动换行到BulletSpan和LeadingMargin span中的下一行时,会发生此问题 解决方案是删除以前的跨距,并在直线增加时再次应用相同的跨距 第一组
int line_counter=editorEditText.getLineCount()代码>当您单击按钮应用跨度时
然后在textwatcher的正文中写下:
if(line\u count>editorEditText.getLineCount()){
LeadingMarginSpan[]LeadingMarginSpan=editorEditText.getText().getSpans(0,editorEditText.getSelectionStart(),
领导边际班);
int s,e;
用于(引线边缘跨距ss:引线边缘跨距){
s=editorEditText.getText().getSpanStart(ss);
e=editorEditText.getText().getSpanEnd(ss);
如果(sdid)您找到解决方案了吗?我相信这是因为标志SPAN.SPAN_INCLUSIVE\u EXCLUSIVE
,它将新字符从SPAN中排除,从而删除前导边距并使光标成为那样。如果将其替换为SPANSPAN.SPAN_INCLUSIVE\u INCLUSIVE
,应该可以工作。