剪贴板
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 ="";
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; } }
|