Eri*_*rik 16 android rtf richtext android-edittext
如果我将Chrome for Android中的文本复制/粘贴到我的EditText视图中,它会变得混乱,显然是由于富文本格式化.
字体大小完全混乱,而不是那么大http://erikmi.tk/WaeG/image.png
有没有办法告诉EditText视图忽略富文本格式?或者我可以捕获粘贴事件并在设置之前将其删除吗?我该怎么办?
更新:
所以我意识到,它editText.getText()
给了我一个SpannableString
包含一些格式.我可以通过召唤来摆脱.clearSpans();
它.但我不能做那样的事情,editText.addTextChangedListener(new TextWatcher() { … }
因为它变得非常缓慢,只有当我离开editText视图时UI才会更新.
问题clearSpans()
是它删除了太多而editText此后表现得很奇怪.按照这个答案中的方法我只删除MetricAffectingSpan
它然后工作正常.
public void afterTextChanged(Editable string)
{
CharacterStyle[] toBeRemovedSpans = string.getSpans(0, string.length(),
MetricAffectingSpan.class);
for (int index = 0; index < toBeRemovedSpans; index++)
string.removeSpan(toBeRemovedSpans[index]);
}
}
Run Code Online (Sandbox Code Playgroud)
一个完美的和简单的方法:覆盖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);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
和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);
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3322 次 |
最近记录: |