有时候需要在edittext中禁止输入粘贴内容,防止论坛灌水、输入大量重复信息等,这就要监听复制粘贴等操作:
重写EditText的
public boolean onTextContextMenuItem(int id) {
return super.onTextContextMenuItem(id);
}
方法,根据id判断当前操作:
id:16908319
全选
id:16908328
选择
id:16908320
剪贴
id:16908321
复制
id:16908322
粘贴
id:16908324
输入法
自定义EditText, 然后重写onTextContextMenuItem方法,在这里面查看id就知道对应的操作了
public class MyEditText extends EditText {
public MyEditText(Context context) {
super(context);
}
public MyEditText(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onTextContextMenuItem(int id) {
System.out.println("id:" + id);
return super.onTextContextMenuItem(id);
}
}
也可以改变它的粘贴内容:
先看看TextView(EditText extends TextView)源码中对于复制黏贴的实现过程:
public boolean onTextContextMenuItem(int id) {
int min = 0;
int max = mText.length();
if (isFocused()) {
final int selStart = getSelectionStart();
final int selEnd = getSelectionEnd();
min = Math.max(0, Math.min(selStart, selEnd));
max = Math.max(0, Math.max(selStart, selEnd));
}
ClipboardManager clip = (ClipboardManager)getContext()
.getSystemService(Context.CLIPBOARD_SERVICE);
switch (id) {
......
case ID_CUT: //裁剪
clip.setText(mTransformed.subSequence(min, max));
((Editable) mText).delete(min, max);
stopTextSelectionMode();
return true;
case ID_COPY: //复制
clip.setText(mTransformed.subSequence(min, max));
stopTextSelectionMode();
return true;
case ID_PASTE://粘贴
CharSequence paste = clip.getText();//得到粘贴版内容
if (paste != null && paste.length() > 0) {
long minMax = prepareSpacesAroundPaste(min, max, paste);
min = extractRangeStartFromLong(minMax);
max = extractRangeEndFromLong(minMax);
Selection.setSelection((Spannable) mText, max);
((Editable) mText).replace(min, max, paste);
stopTextSelectionMode();
}
return true;
......
}
return false;
}
实现思路:
只要我们重设粘贴板的内容就可以,我们需要自定义EditText,重写它的粘贴板内容
这个是给粘贴文本添加内容,比如前缀。也可以做其他设置,或用正则表达式替换,过滤等。
public class MyEditText extends EditText {
private static final int ID_PASTE = android.R.id.paste;
public MyEditText(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onTextContextMenuItem(int id) {
if(id == ID_PASTE){
ClipboardManager clip = (ClipboardManager)getContext().getSystemService(Context.CLIPBOARD_SERVICE);
clip.setText("增加的内容==>"+clip.getText());
}
return super.onTextContextMenuItem(id);
}
}
布局文件中:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<com.example.customeredittexttest.MyEditText
android:id="@+id/edit"
android:layout_width="match_parent"
android:layout_height="50dip"
android:layout_alignParentTop="true"
/>
</RelativeLayout>[/
效果图:
demo源码地址:
EditText监听粘贴内容
http://download.csdn.net/detail/xiaobijia/8154695