Android 源码中的 EditText 复制内容后粘贴有空格 都有这样一个情况,查了下,有篇文章写的很是清楚:http://blog.csdn.net/comkingfly/article/details/6945275
同时我也遇到了这样的问题,所以在此做个记录,我将TextView.java里的prepareSpacesAroundPaste 做处理了。
private long prepareSpacesAroundPaste(int min, int max, CharSequence paste) {
// Paste adds/removes spaces before or after insertion as needed.
if (Character.isSpaceChar(paste.charAt(0))) {
if (min > 0 && Character.isSpaceChar(mTransformed.charAt(min - 1))) {
// Two spaces at beginning of paste: remove one
final int originalLength = mText.length();
((Editable) mText).replace(min - 1, min, "");
// Due to filters, there is no garantee that exactly one character was
// removed. Count instead.
final int delta = mText.length() - originalLength;
min += delta;
max += delta;
}
} else {
if (min > 0 && !Character.isSpaceChar(mTransformed.charAt(min - 1))) {
// No space at beginning of paste: add one
final int originalLength = mText.length();
((Editable) mText).replace(min, min, ""); //Mod by kylin 2012.04.06 " "-->""
// Taking possible filters into account as above.
final int delta = mText.length() - originalLength;
min += delta;
max += delta;
}
}
if (Character.isSpaceChar(paste.charAt(paste.length() - 1))) {
if (max < mText.length() && Character.isSpaceChar(mTransformed.charAt(max))) {
// Two spaces at end of paste: remove one
((Editable) mText).replace(max, max + 1, "");
}
} else {
if (max < mText.length() && !Character.isSpaceChar(mTransformed.charAt(max))) {
// No space at end of paste: add one
((Editable) mText).replace(max, max, ""); //Mod by kylin 2012.04.06 " "-->""
}
}
return packRangeInLong(min, max);
}