android - 不带富文本格式的粘贴到 EditText

标签 android android-edittext rtf richtext

如果我从 Chrome for Android 复制/粘贴文本到我的 EditText View 中,它会变得一团糟,显然是由于富文本格式。

有没有办法告诉 Edi​​tText View 忽略富文本格式?或者我可以在粘贴事件设置之前将其删除吗?我该怎么做?

更新:
所以我意识到 editText.getText()给我一个SpannableString包含一些格式。我可以通过调用 .clearSpans(); 来摆脱它。在上面。但是我不能在 editText.addTextChangedListener(new TextWatcher() { … } 中做类似的事情因为它变得非常慢,并且 UI 仅在我离开 editText View 时更新。

最佳答案

一个完美而简单的方法:覆盖EditTextonTextContextMenuItem并拦截android.R.id.paste成为 android.R.id.pasteAsPlainText

@Override
public boolean onTextContextMenuItem(int id) {
    if (id == android.R.id.paste) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            id = android.R.id.pasteAsPlainText;
        } else {
            onInterceptClipDataToPlainText();
        }
    }
    return super.onTextContextMenuItem(id);
}


private void onInterceptClipDataToPlainText() {
    ClipboardManager clipboard = (ClipboardManager) getContext()
        .getSystemService(Context.CLIPBOARD_SERVICE);
    ClipData clip = clipboard.getPrimaryClip();
    if (clip != null) {
        for (int i = 0; i < clip.getItemCount(); i++) {
            final CharSequence paste;
            // Get an item as text and remove all spans by toString().
            final CharSequence text = clip.getItemAt(i).coerceToText(getContext());
            paste = (text instanceof Spanned) ? text.toString() : text;
            if (paste != null) {
                ClipBoards.copyToClipBoard(getContext(), paste);
            }
        }
    }
}

和copyToClipBoard:
public class ClipBoards {

    public static void copyToClipBoard(@NonNull Context context, @NonNull CharSequence text) {
        ClipData clipData = ClipData.newPlainText("rebase_copy", text);
        ClipboardManager manager = (ClipboardManager) context
            .getSystemService(Context.CLIPBOARD_SERVICE);
        manager.setPrimaryClip(clipData);
    }
}

关于android - 不带富文本格式的粘贴到 EditText,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24758698/

相关文章:

.net - 在 .NET 中将 RTF 转换为 HTML

java - 如何将图像保存为 RTF 格式的文件?

android - 如何在 Android 7.0+ 中检索 SD 卡的序列号?

android - 使非移动网站适合移动浏览器

android - 在不调用 BDD 的情况下恢复 Fragment 上的数据

java - TextInputEditText 不适用于 Android 5.1

java - 在 Java 中替换字符串时出现问题

android - 我如何从我自己的 Authenticator 的 AccountManager 注销?

Android:故意不保存 EditText 中的空行

html - 如何在 Perl 中将 HTML 转换为 RTF?