1. 程式人生 > >Android 剪下板 ClipboardManager 的簡單解析

Android 剪下板 ClipboardManager 的簡單解析

其實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); } } }

日誌輸出:

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物件
新建剪下板的內容物件
將物件放入剪下板中