Android中的复制粘贴文本ClipboardManager

参考:https://www.jianshu.com/p/213d7062cdbe

1.作用

复制粘贴文本内容,其实手机自带这种功能,实际价值并不是很大。

2.概述

Android中有剪切板功能的类是ClipboardManager。但是在

         API 11之前: android.text.ClipboardManager
         API 11之后: android.content.ClipboardManager

主要包含以下四个类:

  • ClipboardManager: 表示一个剪贴板对象,通过 context.getSystemService(CLIPBOARD_SERVICE) 获取。
  • ClipData: 剪贴板中保存的所有剪贴数据集(剪贴板可同时复制/保存多条多种数据条目),在系统剪贴板里只存在一个,当另一个 clip 对象进来时,前一个 clip 对象会消失。
  • ClipData.Item: 剪贴数据集中的一个数据条目,它包含了文本、 Uri 或者 Intent 数据,一个 clip 对象可以包含一个或多个 Item 对象。通过 addItem(ClipData.Item item) 可以实现往 clip 对象中添加 Item。
  • ClipDescription:它包含了 ClipData 对象的 metadata 信息。可以通过 getMimeType(int index) 获取。

             MimeType 一般有以下四种类型:

//对应 ClipData newPlainText(label, text) 的 MimeType
public static final String MIMETYPE_TEXT_PLAIN = "text/plain";
//对应 ClipData.newHtmlText(label, text, htmlText) 的 MimeType
public static final String MIMETYPE_TEXT_HTML = "text/html";
//对应 ClipData.newUri(cr, label, uri) 的 MimeType
public static final String MIMETYPE_TEXT_URILIST = "text/uri-list";
//对应 ClipData.newIntent(label, intent) 的 MimeType
public static final String MIMETYPE_TEXT_INTENT = "text/vnd.android.intent";

  但MIMETYPE_TEXT_URILIST有点特殊,当Uri为content://uri时,它会转为具体的MimeType。

 3.简单使用例子

     复制

// 获取系统剪贴板
clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
// 创建一个剪贴数据集,包含一个普通文本数据条目(需要复制的数据)
ClipData clipData = ClipData.newPlainText(null, "需要复制的文本数据");
// 把数据集设置(复制)到剪贴板
clipboard.setPrimaryClip(clipData);

    类似的方法还有如下:

创建一个包含 htmlText 的 ClipData
一般在浏览器中对网页进行拷贝的时候会调用此方法
其中 htmlText 是包含 HTML 标签的字符串
static public ClipData newHtmlText(CharSequence label, CharSequence text, String htmlText);
创建一个包含 Intent 的 ClipData
static public ClipData newIntent(CharSequence label, Intent intent);
创建一个包含 Uri 的 ClipData,MimeType 会根据 Uri 进行修改
static public ClipData newUri(ContentResolver resolver, CharSequence label, Uri uri);
与 newUri 相对应,但是并不会根据 Uri 修改 MimeType
static public ClipData newRawUri(CharSequence label, Uri uri);

     粘贴

// 获取系统剪贴板
ClipboardManager clipboard = (ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);
// 获取剪贴板的剪贴数据集
ClipData clipData1 = clipboard.getPrimaryClip();
if (clipData1 != null && clipData1.getItemCount() > 0) {
     // 从数据集中获取(粘贴)第一条文本数据
     mNeirong.setText(clipData1.getItemAt(0).getText().toString());
}

剪贴板的数据改变监听

// 获取系统剪贴板
ClipboardManager clipboard = (ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);
// 添加剪贴板数据改变监听器
clipboard.addPrimaryClipChangedListener(new ClipboardManager.OnPrimaryClipChangedListener() {
        @Override
        public void onPrimaryClipChanged() {
            // 剪贴板中的数据被改变,此方法将被回调
        }
    });
    // 移除指定的剪贴板数据改变监听器
    // clipboard.removePrimaryClipChangedListener(listener);

猜你喜欢

转载自blog.csdn.net/qq_40441190/article/details/82499664
今日推荐