最近在做EditText 复制粘贴时遇到了一个问题就是 粘贴时回自动追加空格,于是花点时间研究了下原来是系统粘贴时默认在内容上追加的,先贴代码:
import android.content.ClipData;
import android.content.ClipDescription;
import android.content.ClipboardManager;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.EditText;
/**
* Created by leihuajie on 17-12-27.
*/
public class SearchEditText extends EditText {
public SearchEditText(Context context) {
super(context);
}
public SearchEditText(Context context, AttributeSet attrs) {
super(context, attrs);
}
public SearchEditText(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
public boolean onTextContextMenuItem(int id) {
switch (id) {
case android.R.id.cut:
break;
case android.R.id.paste:
onPaste();
return true;
case android.R.id.copy:
break;
}
return super.onTextContextMenuItem(id);
}
private void onPaste() {
ClipboardManager cbm = (ClipboardManager) getContext().getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clipData = cbm.getPrimaryClip();
if (clipData == null || clipData.getItemCount() == 0) {
return;
}
try {
if (clipData.getDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN)) {
ClipData.Item item = clipData.getItemAt(0);
String lipcContent = item.getText().toString();
int moveStart = getSelectionStart();//光标开始位置
int moveEnd = getSelectionEnd();//光标结束位置
String content = getText().toString();
if (content.length() > 0) {
if (moveStart >= content.length()) {
setText(content.concat(lipcContent));
setSelection(getText().toString().length());//重置光标位置
} else if (moveStart == 0) {
setText(lipcContent.concat(content));
setSelection(lipcContent.length());
} else {
String s1 = content.substring(0, moveStart).concat(lipcContent);
String s2 = content.substring(moveEnd, content.length());
setText(s1.concat(s2));
setSelection(s1.length());
}
} else {
setText(lipcContent);
setSelection(lipcContent.length());
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}