剪贴板

Android 3.0 引入了使用ClipBoard Manager在应用程序内部之间进行完全复制和粘贴操作,剪贴板的获得如下:

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

剪贴板支持文本字符串,URI通常指向一个Content Provider项,Intent用于复制应用程序的快捷方式。

要想把数据添加到剪贴板上可以使用setPrimaryClip(new Clip);

复制

ClipData类提供了大量的方法用来创建一个ClipData:
使用newPaintText方法创建一个新的ClipData对象,该对象包含一个字符用于对当前的数据进行描述,并且把数据类型设置为MIMETYPE_TEXT_PLAIN.

ClipData newClip = ClipData.newPlainText("newClips", mSetClipEt.getText().toString());

对于基于Content Provider的项,可以使用newUri方法,指定一个Content Resolver,标签和待粘贴数据的URI

ClipData.newUri(getContentResolver(), "label", uri);

粘贴

粘贴自定义对象

读取自定义对象,并将其转换为字符串,写入剪切板:

MyData md = new MyData("kimifdw",26);  
//定义字符串
String baseToString ="";
//1.将对象转换成字符串
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
try
{
ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);
objectOutputStream.writeObject(md);
baseToString = Base64.encodeToString(byteArrayOutputStream.toByteArray(), Base64.DEFAULT);
objectOutputStream.close();
}
catch(Exception e)
{
e.printStackTrace();
}

读取剪切板的字符串,并将其转换为对象

byte[] base64ToString = Base64.decode(item.getText().toString(), Base64.DEFAULT);  
//从流中读取数据
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(base64ToString);
try
{
ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream);
MyData md = (MyData)objectInputStream.readObject();
objectInputStream.close();
txtView.setText(md.toString());
}
catch(Exception e)
{
e.printStackTrace();
}

一个简单的例子

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mShowClipTv = (TextView) findViewById(R.id.showClip);
mSetClipEt = (EditText) findViewById(R.id.setClip);
mClipBtn = (Button) findViewById(R.id.clipBtn);
mPasteBtn = (Button) findViewById(R.id.pasteBtn);
clipBoard = (ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);
mClipBtn.setOnClickListener(this);
mPasteBtn.setOnClickListener(this);
}

public void onClick(View v) {
switch (v.getId()) {
case R.id.clipBtn:
ClipData newClip = ClipData.newPlainText("newClips",mSetClipEt.getText().toString());
clipBoard.setPrimaryClip(newClip);
Toast.makeText(MainActivity.this, "复制成功", 0).show();
break;
case R.id.pasteBtn:
if(clipBoard.getPrimaryClipDescription()
.hasMimeType(ClipDescription
.MIMETYPE_TEXT_PLAIN)) {
Item item = clipBoard.getPrimaryClip().getItemAt(0);
mShowClipTv.setText(item.getText());
Toast.makeText(MainActivity.this, "粘贴成功", 0).show();
}else{
Toast.makeText(MainActivity.this, "文本格式", 0).show();
}
break;
default:break;
}
}
Contents
  1. 1. 剪贴板
  2. 2. 复制
  3. 3. 粘贴
  4. 4. 粘贴自定义对象
  5. 5. 一个简单的例子