gpt4 book ai didi

android - EditText + ImageSpan 移至下一行时消失

转载 作者:搜寻专家 更新时间:2023-10-31 08:51:42 24 4
gpt4 key购买 nike

我正在使用一个自定义的 EditText 类,该类支持通过特定小部件的用户输入来输入图像跨度,但遇到了一个奇怪的问题。当图像跨度出现在一行的末尾时,转移到下一行有时会导致图像跨度不再可见。

即之前: Before the issue

在我输入完“不工作”之后。编辑文本如下所示: After issue is produce

基本上,在将图像跨度移动到多行编辑文本中的下一行时,编辑文本似乎没有正确处理图像跨度。只是被带走后对用户来说是不可见的。我可以退格第二张图片的内容,直到它看起来与第一张图片完全一样(到“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 中有一个 imagespan,它会在触发时在新行上变得不可见。

最佳答案

我在使用 EditText 时遇到了同样的问题。

正如之前的评论所说,这是因为空格字符。当 EditText 变成一个新行时,该组件会删除上一行的最后一个字符(如果这是一个空格)。因此,为避免这种情况发生,我们必须使用不同的方法。

在之前的代码中我们有这个:

 editable = editable.insert(start, SPACE);

除此之外,我们应该编写下一段代码:

editable = editable.insert(start, anyCharacter);

anyCharacter 是不同于 ""的字符。

关于android - EditText + ImageSpan 移至下一行时消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41656091/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com