当我的 Android 应用程序中的用户想要粘贴已复制到 EditText 某处的数字时,我需要进行拦截。 如果一个号码有国际前缀 +39 XXXXXXXX 我想在粘贴到选定的 EditText 之前删除 +39。 我尝试寻找解决此问题的方法,并尝试在各种解决方案中实现,但对我没有任何帮助。 例如我试过这个:
txtNumber1.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
Log.d("txtNumber1","onTextChanged");
Log.d("txtNumber1",s.toString());
}
@Override
public void afterTextChanged(Editable s) {
Log.d("txtNumber1","afterTextChanged");
Log.d("txtNumber1",s.toString());
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
Log.d("txtNumber1","beforeTextChanged");
Log.d("txtNumber1 sequence",s.toString());
Log.d("txtNumber1 start",Integer.toString(start));
Log.d("txtNumber1 count",Integer.toString(count));
Log.d("txtNumber1 after",Integer.toString(after));
}
});
但是 beforeTextChanged 没有显示我想要操作的字符串。 编辑:为了更清楚。如果用户想在 EditText 中粘贴他在某处复制的文本并在粘贴之前操作该字符串,我想拦截。我的问题不是如何操作字符串,而是如何在粘贴事件发生之前拦截它。
最佳答案
好的,我已经解决了。
我在粘贴之前拦截剪贴板的内容,对其进行操作并返回到正常的执行流程。这里的代码:
txtNumber.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
Log.d("txtNumber","onTextChanged");
Log.d("txtNumber",s.toString());
}
@Override
public void afterTextChanged(Editable s) {
Log.d("txtNumber","afterTextChanged");
Log.d("txtNumber",s.toString());
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
Log.d("txtNumber","beforeTextChanged");
Log.d("txtNumber sequence",s.toString());
Log.d("txtNumber start",Integer.toString(start));
Log.d("txtNumber count",Integer.toString(count));
Log.d("txtNumber after",Integer.toString(after));
// Gets a handle to the clipboard service.
ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
String pasteData = "";
// If the clipboard doesn't contain data, disable the paste menu item.
// If it does contain data, decide if you can handle the data.
if (clipboard.hasPrimaryClip()) {
// Examines the item on the clipboard. If getText() does not return null, the clip item contains the
// text. Assumes that this application can only handle one item at a time.
ClipData.Item item = clipboard.getPrimaryClip().getItemAt(0);
// Gets the clipboard as text.
pasteData = item.getText().toString();
// If the string contains data, then the paste operation is done
if (pasteData != null) {
Log.d("Paste",pasteData);
pasteData = pasteData.replace("+39", "");
pasteData = pasteData.replace(" ", "");
if (pasteData.length()!=10){
pasteData="";
}else{
String pattern= "^[0-9]*$";
if(!pasteData.matches(pattern)){
pasteData="";
}
}
ClipData clip = ClipData.newPlainText("simple text",pasteData);
clipboard.setPrimaryClip(clip);
}
}
}
});
关于android - 如何操作字符串粘贴到android中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20730041/