Android剪切板的简单解析
文章目录
其实 android 的剪切板使用不算复杂 而且一般的应用需求不会太复杂,只要简单的应用即可
一般都是点击事件时将某段文字复制到剪切板中
Android 中的剪切板是使用ClipboardManager
来管理的
获取这个对象的方法是
1Context.getSystemService(Context.CLIPBOARD_SERVICE);
2cm = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
在 API11 后 使用的是
1android.content.ClipboardManager
API11 前 使用的是
1android.text.ClipboardManager
前者的方法声明是
1public class ClipboardManager extends android.text.ClipboardManager
也就是说即使在 API11 后也可以使用旧的方法来获取和修改剪切板内的内容
CharSequence text = cm.getText();
可以获取到剪切板内的内容
使用cm.setText("复制到剪切板");
可以将内容复制到剪切板内
如果你的应用 minSDK 在 11 以上,可以直接用新的方法,毕竟老的已经过时了
使用如下的代码
1 cm = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
2 ClipData clipData = ClipData.newPlainText("title", "content23");
3 cm.setPrimaryClip(clipData);
可以简单的达到效果
这个有一个对象ClipData
1package com.dn.clipbroaddemo;
2
3import android.content.ClipData;
4import android.content.ClipDescription;
5import android.content.ClipboardManager;
6import android.os.Bundle;
7import android.support.v7.app.AppCompatActivity;
8import android.util.Log;
9
10public class MainActivity extends AppCompatActivity {
11
12 private ClipboardManager cm;
13
14 @Override
15 protected void onCreate(Bundle savedInstanceState) {
16 super.onCreate(savedInstanceState);
17 setContentView(R.layout.activity_main);
18
19 cm = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
20
21// ClipData clipData = ClipData.newPlainText("title", "content23");
22// cm.setPrimaryClip(clipData);
23//
24// ClipData primaryClip = cm.getPrimaryClip();
25
26 ClipData data = new ClipData(new ClipDescription("label",new String[]{ClipDescription.MIMETYPE_TEXT_PLAIN}),
27 new ClipData.Item("test"));
28 data.addItem(new ClipData.Item("test0"));
29 data.addItem(new ClipData.Item("test1"));
30
31 for (int i = 0; i < data.getItemCount(); i++) {
32 ClipData.Item item = data.getItemAt(i);
33 Log.d("MainActivity", "item:" + item);
34 }
35
36 }
37}
日志输出:
109-18 15:49:26.977 30431-30431/com.dn.clipbroaddemo D/MainActivity: item:ClipData.Item { T:test }
209-18 15:49:26.977 30431-30431/com.dn.clipbroaddemo D/MainActivity: item:ClipData.Item { T:test0 }
309-18 15:49:26.977 30431-30431/com.dn.clipbroaddemo D/MainActivity: item:ClipData.Item { T:test1 }
这个对象中可以放很多 Item,我想目的是为了扩展剪切板的功能吧
构造方法中需要传入一个ClipDescription
从字面意义上看应该是用于描述 Data
1ClipDescription primaryClipDescription = cm.getPrimaryClipDescription();
2ClipData primaryClip = cm.getPrimaryClip();
还可以从剪切板中取出对应的描述和 data 信息
总结来说: 获取 manager 对象 新建剪切板的内容对象 将对象放入剪切板中