Android的文本和輸入—複製和粘貼(二)

來源:互聯網
上載者:User

剪貼簿相關的類

ClipboardManager

在Android系統中,系統的剪貼簿是由一個全域的ClipboardManager類來代表的。你不能直接執行個體化這個類,相反,要通過調用getSystemService(CLIPBOARD_SERVICE)方法來獲得對它的引用。

ClipData、ClipData.Item和ClipDescription

要把資料添加到剪貼簿上,你就要建立一個包含資料描述和資料自身的ClipData對象。剪貼簿每次只會持有一個ClipData對象。ClipData對象中包含了一個ClipDescription對象和一個或多個ClipData.Item對象。

ClipDescription對象包含了關於Clip的中繼資料,尤其是它包含了一個針對剪貼資料有效MIME類型數組。當你把一個剪貼對象放到剪貼簿上時,這個數組對執行粘貼處理的應用程式是有效,可以用它來檢查粘貼應用程式是否能夠處理這些有效MIME類型。

ClipData.Item對象包含了文本、URI或Intent類型的資料:

文本是一個CharSequence類型的字串

URI是一個Uri對象,儘管任意類型的URI都是允許的,但通常這個對象中包含了一個內容提供器的URI。提供資料的應用程式把URI放到剪貼簿上。想要粘貼資料的應用程式會從剪貼簿上擷取這個URI,並使用它訪問內容提供器(或其他的資料來源)來擷取資料。

Intent是一個Intent對象。這種類型允許你把一個應用程式的捷徑複製到剪貼簿上。然後使用者把該捷徑剪貼到它們的應用程式中留作以後使用。

你可以把多個ClipData.Item對象添加到剪貼簿上。這就允許使用者把多項選擇作為一個單獨的剪貼對象。例如,如果你有一個列表視窗,它允許用一次選擇多個清單項目,你就可以一次性的把所有的選擇項目複製到剪貼簿上。要做這件事情,你就要給每個清單項目分別建立一個ClipData.Item對,然後把每個ClipData.Item對象添加到ClipData對象中。

ClipData類的方法

ClipData類為建立一個帶有一個ClipData.Item對象和一個簡單的ClipDescription對象的ClipData對象提供了靜態便利的方法:

newPlainText(label, text)

這個方法返回了一個ClipData對象,它帶有一個包含文本字串的ClipData.Item對象。ClipDescription對象的標籤被設定為label,MIME類型是MIMETYPE_TEXT_PLAIN

使用newPlainText()方法來建立一個文本字串類型的剪貼對象。

newUri(resolver, label, URI)

這個方法返回一個ClipData對象,它帶有一個包含URI的ClipData.Item對象。ClipDescription對象的標籤被設定為label。如果URI是一個內容的URI(Uri.getScheme()方法返回content:),那麼這個方法就要使用resolver參數中提供的ContentResolver對象從內容提供器中擷取有效MIME類型,並把它們儲存在ClipDescription對象中。對於不是content:類型的URI,這個方法會把MIME類型設定為MIMETYPE_TEXT_URILIST。

使用newUri()方法從一個URI中建立一個剪貼對象,特別是content:類型的。

newIntent(label, intent)

這個方法返回一個ClipData對象,它帶有一個單獨的包含Intent對象的ClipData.Item對象。ClipDescription對象標籤被設定為label,MIME類型是MIMETYPE_TEXT_INTENT。

使用newIntent()方法從一個Intent對象中建立一個剪貼對象。

強制把剪貼簿資料轉換成文本

即使你的應用程式只處理文本,你也可以使用ClipData.Item.coerceToText()方法把剪貼簿的非文本資料轉換成文本。

這個方法把ClipData.Item中的資料轉換成文本,並返回一個CharSequence類型的字串。ClipData.Item.coerceToText()方法會根據ClipData.Item中的資料格式來返迴文本值:

Text:如果ClipData.Item是文本(getText()方法傳回值不是null),那麼coerceToText()方法會返回該文本。

URI:如果ClipData.Item是一個URI(getUri()方法傳回值不是null),coerceToText()方法會嘗試把它作為一個內容的URI:

     1. 如果該URI是一個內容的URI,並且它的提供器可以返回一個文字資料流,coerceToText()方法會返回一個文字資料流。

     2. 如果該URI是一個內容的URI,但是它的提供器不能提供一個文字資料流,那麼coerceToText()方法會該URI的運算式。這個運算式與Uri.toString()方法的傳回值相同。

     3. 如果該URI不是一個內容的URI,那麼coerceToText()方法會該URI的運算式。這個運算式與Uri.toString()方法的傳回值相同。

Intent:如果ClipData.Item是一個Intent對象(getIntent()方法傳回值不是null),coerceToText()方法會把它轉換成一個Intent的URI,並且返回它。這個運算式與Intent.toUri(URI_INTENT_SCHEME)方法的傳回值相同。

剪貼簿架構如1。

圖1.Android剪貼簿架構

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.