监听剪切板内容,解决复制粘贴内容格式错乱

        我们在进行编辑东西时经常会参考一些论坛或回答,针对图片和文字都有的html文本直接复制粘贴的话就会出现文字显示重叠,或者字号异常。如果我们要重新排版的话,就需要只截取文字,然后对图片下载后重新编辑。其实这些都可以实现,我们只需要了解ClipboardManager的使用即可。下面是我在一个富文本编辑页面使用的代码,仿照知乎只对剪切板中的文字进行粘贴。

1.在当前页面初始化的时候进行注册:

registerClipEvents();

private ClipboardManager.OnPrimaryClipChangedListener clipListener;
    private ClipboardManager clipManager;
    private CharSequence lastClipText;//上次复制的文字
    /**
     * 监听粘贴板数据的改变
     */
    private void registerClipEvents() {

        clipManager = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
        clipListener=new ClipboardManager.OnPrimaryClipChangedListener() {
            @Override
            public void onPrimaryClipChanged() {

                if (clipManager.hasPrimaryClip() && clipManager.getPrimaryClip().getItemCount() > 0) {

                    //从数据集中获取(粘贴)第一条文本数据
                    CharSequence addedText = clipManager.getPrimaryClip().getItemAt(0).getText();
                    ClipData clipData = ClipData.newPlainText("simple text", addedText);
                    if(addedText!=null){
                        if(!addedText.equals(lastClipText)){
                            clipManager.setPrimaryClip(clipData);
                            lastClipText=addedText;
                        }
                    }
                }
            }
        };
        clipManager.addPrimaryClipChangedListener(clipListener);

        ClipData clipData = ClipData.newPlainText("simple text", "随便写的内容");
        clipManager.setPrimaryClip(clipData);
    }

2.在页面销毁onDestroy()中进行移除

     //移除监听 否则会内存泄漏
     if(clipManager!=null){
         clipManager.removePrimaryClipChangedListener(clipListener);
     }
3.这样就可以针对系统剪切板的复制粘贴内容进行自定义更改了!

你可能感兴趣的:(开发)