android - 如何操作字符串粘贴到android中

标签 android clipboard

当我的 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/

相关文章:

image - 如何从 JavaFX 中的剪贴板正确获取图像;有问题的应用程序和没有问题的应用程序有什么区别?

javascript - 如何在 ExtJs 中添加复制到剪贴板功能?

android - Libgdx:移动旋转的透视相机

java - 如何获取 Android 中特定国家/州/政治部门的地址?

ios - 通过 safari 将文本复制到剪贴板并在 iOS App 中读取该剪贴板数据

javascript - 是否可以使用 JavaScript 在 Firefox、Safari 和 Chrome 中读取剪贴板?

WPF DataGrid,Ctrl+C 后复制到剪贴板,OnCopyingRowClipboardContent

android - 使用 fragment 时如何管理应用栏?

Android和播放SVG动画

android - 如何在 ListView 上更改颜色和字体