我们在进行编辑东西时经常会参考一些论坛或回答,针对图片和文字都有的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.这样就可以针对系统剪切板的复制粘贴内容进行自定义更改了!