1. 程式人生 > >android開發 -- 複製文字內容到系統剪貼簿(自由複製)

android開發 -- 複製文字內容到系統剪貼簿(自由複製)

直接上程式碼:(對應的類:android.content.ClipboardManager)

                //獲取剪貼簿管理器:
                ClipboardManager cm = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
                // 建立普通字元型ClipData
                ClipData mClipData = ClipData.newPlainText("Label", "這裡是要複製的文字");
                // 將ClipData內容放到系統剪貼簿裡。
                cm.setPrimaryClip(mClipData);
上面的程式碼就可以將文字放到剪貼簿了,然後找個輸入框“貼上”就行啦~

ps:API 11之前,複製到系統剪貼簿是cm.setText(“複製的文字”);但這句已經失效了,在API11後對ClipboardManager進行了升級,改成cm.setPrimaryClip(mClipData),使之可以通過(ClipData)複製文字、Uri和Intent。正如上面示例;


***********************************************************************

如需自由複製TextView等控制元件的文字,只是要在該控制元件上加上這句就好了android:textIsSelectable="true",或者java程式碼加

setTextIsSelectable(true);效果如圖:



************************************************************************

下面詳細介紹下:

(1)獲取剪貼簿管理器:

ClipboardManager mClipboardManager =(ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);
(2)建立能夠存入剪貼簿的ClipData物件(ClipData物件中包含一個或多個ClipData.Item物件):

        A. 建立 普通字元型ClipData:
       ClipData mClipData =ClipData.newPlainText("Label", "Content");         //‘Label’這是任意文字標籤
        B. 建立 URL型ClipData:
       ClipData.newRawUri("Label",Uri.parse("http://www.baidu.com"));

        C. 建立Intent型ClipData:

       ClipData.newIntent("Label", intent);
注意:上面三種方法只在ClipData物件中建立了一個ClipData.Item物件,如果想 向ClipData物件中新增多個Item應該通過ClipData物件的 addItem()方法新增。

(3)將ClipData資料複製到剪貼簿:
     ClipboardManager.setPrimaryClip(ClipData物件);
(4)從剪貼簿中獲取ClipData資料:
     ClipboardManager.getPrimaryClip();


ps:普通字串,URL和Intent三種資料使用情況:
(1)普通字元:就是普通字串的剪下,複製,貼上。
(2)URL:在複製的時候可以複製一個URL,這個URL可以是請求ContentProvider的URL,在貼上的時候呼叫ContntProvider獲取資料,並使用。
(3)Intent:如,在記事本應用中長按某一個記錄本條目,這時會建立刪除這個記事本的Intent,並新增到剪貼簿,當用戶將這個記事本條目拖到垃圾桶鬆開時,應用會從剪貼簿中獲取Intent並執行,這個記事本條目就被刪除了。