Android 剪切板 ClipboardManager 的简单解析

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_28478281/article/details/52575190

其实android的剪切板使用不算复杂
而且一般的应用需求不会太复杂,只要简单的应用即可

一般都是点击事件时将某段文字复制到剪切板中

Android中的剪切板是使用ClipboardManager来管理的
获取这个对象的方法是

Context.getSystemService(Context.CLIPBOARD_SERVICE);
cm = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);

在API11后
使用的是android.content.ClipboardManager
API11前
使用的是android.text.ClipboardManager

前者的方法声明是
public class ClipboardManager extends android.text.ClipboardManager
也就是说即使在API11后也可以使用旧的方法来获取和修改剪切板内的内容

CharSequence text = cm.getText();可以获取到剪切板内的内容
使用cm.setText("复制到剪切板");可以将内容复制到剪切板内

如果你的应用minSDK在11以上,可以直接用新的方法,毕竟老的已经过时了

使用如下的代码

    cm = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
    ClipData clipData = ClipData.newPlainText("title", "content23");
    cm.setPrimaryClip(clipData);

可以简单的达到效果

这个有一个对象ClipData

package com.dn.clipbroaddemo;

import android.content.ClipData;
import android.content.ClipDescription;
import android.content.ClipboardManager;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;

public class MainActivity extends AppCompatActivity {

    private ClipboardManager cm;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        cm = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);

//        ClipData clipData = ClipData.newPlainText("title", "content23");
//        cm.setPrimaryClip(clipData);
//
//        ClipData primaryClip = cm.getPrimaryClip();

        ClipData data = new ClipData(new ClipDescription("label",new String[]{ClipDescription.MIMETYPE_TEXT_PLAIN}),
                new ClipData.Item("test"));
        data.addItem(new ClipData.Item("test0"));
        data.addItem(new ClipData.Item("test1"));

        for (int i = 0; i < data.getItemCount(); i++) {
            ClipData.Item item = data.getItemAt(i);
            Log.d("MainActivity", "item:" + item);
        }

    }
}

日志输出:

扫描二维码关注公众号,回复: 4074618 查看本文章
09-18 15:49:26.977 30431-30431/com.dn.clipbroaddemo D/MainActivity: item:ClipData.Item { T:test }
09-18 15:49:26.977 30431-30431/com.dn.clipbroaddemo D/MainActivity: item:ClipData.Item { T:test0 }
09-18 15:49:26.977 30431-30431/com.dn.clipbroaddemo D/MainActivity: item:ClipData.Item { T:test1 }

这个对象中可以放很多Item,我想目的是为了扩展剪切板的功能吧
构造方法中需要传入一个ClipDescription从字面意义上看应该是用于描述Data

ClipDescription primaryClipDescription = cm.getPrimaryClipDescription();
ClipData primaryClip = cm.getPrimaryClip();

还可以从剪切板中取出对应的描述和data信息

总结来说:
获取manager对象
新建剪切板的内容对象
将对象放入剪切板中

猜你喜欢

转载自blog.csdn.net/qq_28478281/article/details/52575190