Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用bulletspan时不直接换行_Android_Text_Textedit_Spannablestring - Fatal编程技术网

Android 使用bulletspan时不直接换行

Android 使用bulletspan时不直接换行,android,text,textedit,spannablestring,Android,Text,Textedit,Spannablestring,我已经试着解决我的问题两天了,但是没有成功 问题是:当我将BulletSpan设置为text,然后在EditText中显示它时,一切正常,直到我开始键入另一个文本。当文本在屏幕的末尾被包装时,缩进工作,但光标指向实际位置,并且在光标后添加上一行的一些字符。要更好地说明此问题,请参见所附图像 另外值得一提的是,只有当我输入文本时才会发生这种情况,当我在源代码中设置文本时,文本太长,不能只在一行上,换行工作正常,没有添加额外的字符,光标位置也不正确 我也试着领导马金斯潘。斯坦德和他的行为是一样的

我已经试着解决我的问题两天了,但是没有成功

问题是:当我将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中排除,从而删除前导边距并使光标成为那样。如果将其替换为SPAN
SPAN.SPAN_INCLUSIVE\u INCLUSIVE
,应该可以工作。