Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在android中操作要粘贴的字符串_Android_Clipboard - Fatal编程技术网

如何在android中操作要粘贴的字符串

如何在android中操作要粘贴的字符串,android,clipboard,Android,Clipboard,当我的Android应用程序中的用户想要粘贴复制到EditText中某处的数字时,我需要拦截。 如果一个数字的国际前缀为+39 XXXXXXXX,我希望在粘贴到所选编辑文本之前删除+39。 我试图寻找解决这个问题的方法,并尝试在各种解决方案中实现,但对我来说没有任何效果。 例如,我尝试了以下方法: txtNumber1.addTextChangedListener(new TextWatcher() { @Override public void onTex

当我的Android应用程序中的用户想要粘贴复制到EditText中某处的数字时,我需要拦截。 如果一个数字的国际前缀为+39 XXXXXXXX,我希望在粘贴到所选编辑文本之前删除+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中粘贴他复制到某处的文本,我希望截取,并在粘贴之前处理该字符串。我的问题不是如何操作字符串,而是如何在粘贴事件发生之前拦截它。

为什么不使用字符串方法删除字符串的前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中,它第一次不能正确工作。