如何在android中操作要粘贴的字符串
当我的Android应用程序中的用户想要粘贴复制到EditText中某处的数字时,我需要拦截。 如果一个数字的国际前缀为+39 XXXXXXXX,我希望在粘贴到所选编辑文本之前删除+39。 我试图寻找解决这个问题的方法,并尝试在各种解决方案中实现,但对我来说没有任何效果。 例如,我尝试了以下方法:如何在android中操作要粘贴的字符串,android,clipboard,Android,Clipboard,当我的Android应用程序中的用户想要粘贴复制到EditText中某处的数字时,我需要拦截。 如果一个数字的国际前缀为+39 XXXXXXXX,我希望在粘贴到所选编辑文本之前删除+39。 我试图寻找解决这个问题的方法,并尝试在各种解决方案中实现,但对我来说没有任何效果。 例如,我尝试了以下方法: txtNumber1.addTextChangedListener(new TextWatcher() { @Override public void onTex
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中粘贴他复制到某处的文本,我希望截取,并在粘贴之前处理该字符串。我的问题不是如何操作字符串,而是如何在粘贴事件发生之前拦截它。为什么不使用字符串方法删除字符串的前3个字符,我认为不需要在EditText上使用文本更改事件
String phone = txtNumber1.getText().toString();
String changedString = phone.substring(2, phone.length())
txtNumber1.setText(changedString);
好的,我已经解决了
我在粘贴之前截取剪贴板的内容,对其进行操作,然后返回正常的执行流程。代码如下:
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);
}
}
}
});
与论坛网站不同,我们不使用“感谢”或“感谢任何帮助”或签名。请参阅“.好的,John,我明白;-)嗨,我的问题不是如何替换字符串,而是如何在用户使用粘贴命令时拦截和替换;-)如果剪贴板包含数据,但用户没有粘贴它,该怎么办。即使剪贴板不是空的,用户也可以键入。刚才使用了此解决方案,我的发现表明它更好地用于ContextChanged(字符序列s,int start,int before,int count)。因为在beforeTextChanged中,它第一次不能正确工作。