我正在使用一个自定义的EditText类,支持通过用户输入插入图像跨度到特定小部件中,但遇到了奇怪的问题。当图像跨度出现在一行的末尾时,换行有时会导致图像跨度不再可见。
例如,在此之前: 在我完成输入“not working.”后,编辑文本将显示如下: 基本上,当涉及到将图像跨度移动到多行EditText中的下一行时,EditText似乎无法正确处理它。当被带到下一行时,它对用户来说是不可见的。我可以删除第二个图像的内容,直到它看起来与第一个图像完全相同(到“n”),然后我们就能再次看到图像跨度。
我只有几个图标,用户可以按下它们,通过Spannable将图像嵌入自定义EditText中。我使用文本映射到可绘制对象的映射表,以便在用户按下特定按钮时知道要使用哪个图标。主要问题是,如果EditText中有ImageSpan,在触发新行时可能会变为不可见状态。
例如,在此之前: 在我完成输入“not working.”后,编辑文本将显示如下: 基本上,当涉及到将图像跨度移动到多行EditText中的下一行时,EditText似乎无法正确处理它。当被带到下一行时,它对用户来说是不可见的。我可以删除第二个图像的内容,直到它看起来与第一个图像完全相同(到“n”),然后我们就能再次看到图像跨度。
有人知道我可以做什么来解决这个问题吗?这是一个我想在我的应用程序中保留的关键组件。我也不能回退到单行编辑文本,多行支持也是至关重要的。
为了可重复性,这是我添加ImageSpan到我的编辑文本的代码:
public void appendSpannedText(String s){
if (textToDrawableMap == null || textToDrawableMap.isEmpty()
|| !textToDrawableMap.containsKey(s)) {
return;
}
// Acquire the mapped drawable
Drawable drawable = textToDrawableMap.get(s);
Editable editable = getText();
int start = getSelectionStart();
// Insert the a space at the start that's eaten by the image span
// being set.
editable = editable.insert(start, SPACE);
// Insert the new string at the starting point
SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(editable);
// Create the span and set the new span to the appropriate range
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
ImageSpan span = new ImageSpan(drawable, ImageSpan.ALIGN_BASELINE);
int nextIdx = start + 1;
spannableStringBuilder.setSpan(span,
start, nextIdx,
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
// Update the spanned text and the cursor
setText(spannableStringBuilder);
setSelection(nextIdx);
}
我只有几个图标,用户可以按下它们,通过Spannable将图像嵌入自定义EditText中。我使用文本映射到可绘制对象的映射表,以便在用户按下特定按钮时知道要使用哪个图标。主要问题是,如果EditText中有ImageSpan,在触发新行时可能会变为不可见状态。