如果我从 Chrome for Android 复制/粘贴文本到我的 EditText View 中,它会变得一团糟,显然是由于富文本格式。
有没有办法告诉 EditText View 忽略富文本格式?或者我可以在粘贴事件设置之前将其删除吗?我该怎么做?
更新:
所以我意识到 editText.getText()
给我一个SpannableString
包含一些格式。我可以通过调用 .clearSpans();
来摆脱它。在上面。但是我不能在 editText.addTextChangedListener(new TextWatcher() { … }
中做类似的事情因为它变得非常慢,并且 UI 仅在我离开 editText View 时更新。
最佳答案
一个完美而简单的方法:覆盖EditText
的onTextContextMenuItem
并拦截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/