【问题标题】:EditText + ImageSpan disappearing when carry over to next lineEditText + ImageSpan 在结转到下一行时消失
【发布时间】:2017-01-14 23:23:42
【问题描述】:

我正在使用自定义 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 将图像跨度插入到自定义编辑文本中。我使用我支持的文本映射 -> 可绘制对象,因此我知道当用户按下特定按钮时要使用哪个。主要的是,如果您在编辑文本中有一个图像跨度,则在触发时它会在新行上变得不可见。

【问题讨论】:

    标签: android html android-edittext


    【解决方案1】:

    我在 EditText 上遇到了同样的问题。

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

    在前面的代码中我们有这样的:

     editable = editable.insert(start, SPACE);
    

    我们应该写下一段代码:

    editable = editable.insert(start, anyCharacter);
    

    其中 anyCharacter 是与“ ”不同的字符。

    【讨论】:

    • 哇,伙计,你救了我。我在 TextView 上遇到了同样的问题,闯入新行使它失去了我应该用 ImageSpans 替换的空间。令人惊讶的是你想出了这个。谢谢!
    【解决方案2】:

    把它放在 setSpan 之前:

    spannableStringBuilder.append("\r");
    

    【讨论】:

    • 您找到解决方案了吗?我有同样的问题。我想在这里解决这个问题。
    • 我已经解决了这个问题。问题是文本视图修剪第一个和最后一个空格。如果您添加一个字符而不是空格,它将解决。还是谢谢
    猜你喜欢
    • 2020-10-06
    • 2016-04-18
    • 2012-12-01
    • 1970-01-01
    • 2012-01-09
    • 2019-03-10
    • 1970-01-01
    • 2012-08-06
    • 1970-01-01
    相关资源
    最近更新 更多