日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android中的复制粘贴

發布時間:2025/6/15 Android 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android中的复制粘贴 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

The Clipboard Framework

  當使用clipboard framework時,把數據放在一個剪切對象(clip object)里,然后這個對象會放在系統的剪貼板里。

  clip object可以有三種形式:

  Text:文字字符串。

  文字是直接放在clip對象中,然后放在剪貼板里;粘貼這個字符串的時候直接從剪貼板拿到這個對象,把字符串放入你的應用存儲中。

  URI:一個Uri?對象。

  表示任何形式的URI。這種形式主要用于從一個content provider中復制復雜的數據。

  復制的時候把一個Uri?對象放在一個clip對象中,然后再放在剪貼板里;粘貼的時候取出這個clip對象,得到Uri,把它解析為一個數據資源比如content provider,然后從資源中復制數據到應用存儲中。

  Intent:?Intent對象。

  這支持了復制應用快捷方式。

  復制的時候把Intent對象放在clip對象中,再放入剪貼板;粘貼數據時,從clip對象中得到Intent對象,放入應用存儲區域中。

?

  剪貼板每次僅會持有一個clip對象,當應用放另一個clip對象進來時,前一個就消失了。

?

剪貼板的類

ClipboardManager

  ClipboardManager代表了系統的剪貼板,通過getSystemService(CLIPBOARD_SERVICE)獲取。

  全名為android.text.ClipboardManager從API 11開始就廢棄了。

  取而代之的是它的子類:android.content.ClipboardManager (since API Level 11)。

?

ClipData, ClipDescription, and ClipData.Item

  前面說的clip對象就是ClipData類的對象,其中包含了一個?ClipDescription對象和一個或多個ClipData.Item對象。

  ClipDescription對象中包含了一個數組,描述clip對象的MIME類型。

  ClipData.Item對象中包含文字、URI或者Intent數據。一個clip對象中可以包含一個或多個Item對象

?

  比如你想要復制list中的多項數據,你可以為list中的每一項創建一個ClipData.Item對象,然后把它們放進一個ClipData對象中,這樣就一次性把多項數據都放在了剪貼板中。

  注意ClipData這個類是API 11才有的。

?

ClipData中的簡潔方法

  ClipData類中有一些靜態的簡潔方法,用于創建只有一個ClipData.Item和一條簡單描述(?ClipDescription)的ClipData對象。

  newPlainText(label, text)返回ClipData對象,數據是文字text,描述是label,MIME類型是MIMETYPE_TEXT_PLAIN。

  類似的有:

  newUri(resolver, label, URI)

  newIntent(label, intent)

?

?

把剪貼板中的數據強轉為文字

  剪貼板中的非text數據可以通過ClipData.Item.coerceToText()方法轉換為text處理。

  1.這個方法首先會檢測item是不是包含text,如果有就直接返回。

  2.不包含text,之后看是否有URI:

  如果這個URI是content URI,并且provider返回文字流,coerceToText()就返回該文字流;

  如果provider不返回文字流,或者這個URI根本不是content URI,coerceToText()方法會返回URI的表達,即?Uri.toString()。

  3.最后,如果這個item即不包含text也沒有URI,那么它就應該包含Intent,?coerceToText()?方法會把Intent對象轉化為一個Intent URI返回,  和?Intent.toUri(URI_INTENT_SCHEME)一樣。

?

Android clipboard framework總結

  如圖:

?

?

?

復制到剪貼板

  1.首先,獲取剪貼板服務:

// Gets a handle to the clipboard service. ClipboardManager clipboard = (ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);

?

  2.然后把數據放在ClipData對象中。

  對文字:

// Creates a new text clip to put on the clipboard ClipData clip = ClipData.newPlainText("simple text","Hello, World!");

  對URI:

// Creates a Uri based on a base Uri and a record ID based on the contact's last name // Declares the base URI string private static final String CONTACTS = "content://com.example.contacts"; // Declares a path string for URIs that you use to copy data private static final String COPY_PATH = "/copy"; // Declares the Uri to paste to the clipboard Uri copyUri = Uri.parse(CONTACTS + COPY_PATH + "/" + lastName); ... // Creates a new URI clip object. The system uses the anonymous getContentResolver() object to // get MIME types from provider. The clip object's label is "URI", and its data is // the Uri previously created. ClipData clip = ClipData.newUri(getContentResolver(),"URI",copyUri);

  對Intent:

// Creates the Intent Intent appIntent = new Intent(this, com.example.demo.myapplication.class); ... // Creates a clip object with the Intent in it. Its label is "Intent" and its data is // the Intent object created previously ClipData clip = ClipData.newIntent("Intent",appIntent);

?

  3.把clip對象放在剪貼板中:

// Set the clipboard's primary clip. clipboard.setPrimaryClip(clip); ?

從剪貼板中粘貼

  以文字的粘貼為例,其他略。

  例子如下:

package com.example.helloclipboard;import android.os.Bundle; import android.app.Activity; import android.content.ClipData; import android.content.ClipboardManager; import android.content.Context; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; public class HelloClipboardMainActivity extends Activity { private EditText mEditText1 = null; private TextView mResultTextView = null; private ClipboardManager mClipboard = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_hello_clipboard_main); mResultTextView = (TextView) findViewById(R.id.textView1); mEditText1 = (EditText) findViewById(R.id.editText1); Button copyButton = (Button) findViewById(R.id.button1); Button pasteButton = (Button) findViewById(R.id.button2); copyButton.setOnClickListener(mOnClickListener); pasteButton.setOnClickListener(mOnClickListener); } private OnClickListener mOnClickListener = new OnClickListener() { @Override public void onClick(View v) { switch (v.getId()) { case R.id.button1: copyFromEditText1(); break; case R.id.button2: pasteToResult(); break; default: break; } } }; private void copyFromEditText1() { // Gets a handle to the clipboard service. if (null == mClipboard) { mClipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); } // Creates a new text clip to put on the clipboard ClipData clip = ClipData.newPlainText("simple text", mEditText1.getText()); // Set the clipboard's primary clip. mClipboard.setPrimaryClip(clip); } private void pasteToResult() { // Gets a handle to the clipboard service. if (null == mClipboard) { mClipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); } String resultString = ""; // 檢查剪貼板是否有內容 if (!mClipboard.hasPrimaryClip()) { Toast.makeText(HelloClipboardMainActivity.this, "Clipboard is empty", Toast.LENGTH_SHORT).show(); } else { ClipData clipData = mClipboard.getPrimaryClip(); int count = clipData.getItemCount(); for (int i = 0; i < count; ++i) { ClipData.Item item = clipData.getItemAt(i); CharSequence str = item .coerceToText(HelloClipboardMainActivity.this); Log.i("mengdd", "item : " + i + ": " + str); resultString += str; } } mResultTextView.setText(resultString); } }

?

?

設計有效的復制粘貼功能

  為了設計有效的復制粘貼功能,以下幾點需要注意:

  1.任何時間,都只有一個clip對象在剪貼板里。

  新的復制操作都會覆蓋前一個clip對象,因為用戶可能從你的應用中退出,從其他應用中拷貝一個東西,所以你不能假定用戶在你的應用中拷貝的上一個東西一定還放在剪貼板里。

?

  2.一個clip對象,即ClipData中的多個ClipData.Item?對象是為了支持多選項的復制粘貼,而不是為了支持單選的多種形式。

  你通常需要clip對象中的所有的項目,即ClipData.Item有一樣的形式,比如都是文字,都是URI或都是Intent,而不是混合各種形式。

?

  3.當你提供數據時,你可以提供不同的MIME表達方式。

  將你支持的MIME類型加入到ClipDescription中去,然后在你的content provider中實現它。

?

  4.當你從剪貼板得到數據時,你的應用有責任檢查可用的MIME類型,然后決定使用哪一個。

  即便有一個clip對象在剪貼板中并且用戶要求粘貼,你的應用有可能不需要進行粘貼操作。

  你應該在MIME類型兼容的時候執行粘貼操作。你可以選擇使用?coerceToText()方法將粘貼的內容轉換為文字。

  如果你的應用支持多種類型,你可以讓用戶自己選用哪一個。

?

參考資料

  API Guides: Copy and Paste:

  http://developer.android.com/guide/topics/text/copy-paste.html

總結

以上是生活随笔為你收集整理的Android中的复制粘贴的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久99久久99精品免观看软件 | 亚洲色图15p | 精人妻一区二区三区 | 免费色视频 | 一区二区日本 | 玖玖在线观看 | 天天综合网在线观看 | 日本超碰 | 女大学生的家政保姆初体验 | 欧美激情视频在线观看 | 亚洲xxxx天美| 国产精品视频一 | 天天干夜夜草 | 精品无码一区二区三区电影桃花 | 欧美日本国产在线 | 97超碰人人澡 | 日本三级视频 | 色欲久久久天天天精品综合网 | 亚洲国产精品一区二区三区 | 特黄特色免费视频 | 女人下边被添全过视频 | 国产一区二区精华 | 国产h视频在线观看 | 老司机深夜网站 | 国内露脸中年夫妇交换 | 国产传媒在线观看 | 国产乡下妇女做爰视频 | 亚洲综合色视频 | av番号网| a级黄色小视频 | 一区二区三区中文字幕 | 欧美一二三区在线观看 | 97午夜| 开心激情五月网 | 北京富婆泄欲对白 | 成年人视频在线免费观看 | 国产一区二区免费电影 | 日韩三级小视频 | 国产精品色悠悠 | 九九综合 | 午夜影院一区 | 一道本av | 欧美午夜视频 | 性饥渴的农村熟妇 | 日少妇的逼 | 欧美日韩精品在线播放 | 五月天婷婷社区 | 饥渴少妇伦色诱公 | 三级网站在线播放 | 欧美日韩免费高清 | 亚洲欧美精品一区二区三区 | 黄色在线播放 | 制服丝袜在线一区 | 亚洲3p | 天堂va在线 | 四虎影视大全 | 影音先锋日韩资源 | 国产91清纯白嫩初高中在线观看 | 欧美在线va | 一区二区在线免费观看 | 污污的视频网站在线观看 | 欧美精品一区二区蜜臀亚洲 | 欧美一级做性受免费大片免费 | 日本免费一区二区三区四区五六区 | 欧美激情伊人 | 欧美一区二区免费在线观看 | 高潮疯狂过瘾粗话对白 | 亚洲 欧美 成人 | 欧洲一级黄色片 | 久久综合精品国产二区无码不卡 | 免费一级suv好看的国产网站 | 久久亚洲国产精品 | 日韩小视频在线观看 | 久久老司机| 国产高h视频 | 亚洲另类春色 | 欧美影院一区二区三区 | 成人免费视频国产免费网站 | 徐锦江一级淫片免费看 | 欧美激情一区 | 精品久久久中文字幕 | 福利小视频在线 | 一区二区亚洲视频 | 欧美aaaaaaaaaa| 无码人妻一区二区三区在线 | 打屁股视频网站 | 久久怡春院| 女久久| 中文一区二区在线播放 | 中文字幕欧美亚洲 | 国产麻豆剧果冻传媒白晶晶 | 手机在线精品视频 | 久久精品无码Av中文字幕 | 伊人久久大香线蕉av色婷婷色 | 国产精品久久久久久久毛片 | 综合国产视频 | av在线影音| 亚洲国产日韩a在线播放性色 | 91成人免费在线观看 |