gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 14:55:31 25 4
gpt4 key购买 nike

如果我从 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/

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