Android中的复制粘贴
来源:互联网 发布:mac抓图工具怎么用 编辑:程序博客网 时间:2024/04/27 21:40
MainActivity.java:
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 MainActivity extends Activity implements OnClickListener{ private EditText mEditText1 = null; private TextView mResultTextView = null; private ClipboardManager mClipboard = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.clipboard_demo); mResultTextView = (TextView) findViewById(R.id.textView1); mEditText1 = (EditText) findViewById(R.id.editText1); Button copyButton = (Button) findViewById(R.id.copy); Button pasteButton = (Button) findViewById(R.id.paste); copyButton.setOnClickListener(this); pasteButton.setOnClickListener(this); } /** * 将editText中文字复制到剪贴板 */ 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()); //URI// ClipData clip = ClipData.newUri(getContentResolver(),"URI",copyUri); //intent// ClipData clip = ClipData.newIntent("Intent",appIntent); // 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(MainActivity.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(MainActivity.this); Log.i("mengdd", "item : " + i + ": " + str); resultString += str; } } mResultTextView.setText(resultString); }@Overridepublic void onClick(View v) { switch (v.getId()) { case R.id.copy: copyFromEditText1(); break; case R.id.paste: pasteToResult(); break; default: break; } }}
clipboard_demo.xml:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView" /> <EditText android:id="@+id/editText1" android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10" > </EditText> <Button android:id="@+id/copy" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="copy" /> <Button android:id="@+id/paste" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="paste" /></LinearLayout>
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)一样。
复制到剪贴板
// Gets a handle to the clipboard service.ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);2.然后把数据放在ClipData对象中。
对文字:
// Creates a Uri based on a base Uri and a record ID based on the contact's last name// Declares the base URI stringprivate static final String CONTACTS = "content://com.example.contacts";// Declares a path string for URIs that you use to copy dataprivate static final String COPY_PATH = "/copy";// Declares the Uri to paste to the clipboardUri 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 IntentIntent 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 previouslyClipData clip = ClipData.newIntent("Intent",appIntent);
3.把clip对象放在剪贴板中:
clipboard.setPrimaryClip(clip);
- Android中的复制粘贴
- Android中的复制粘贴
- Android中的复制粘贴?
- Android中的复制粘贴
- Android中的复制粘贴
- Android中的复制粘贴
- 8、Android中的复制粘贴
- 转:Android中的复制粘贴
- 浅析Android中的复制粘贴控制
- vi中的复制,粘贴
- android 复制、剪切、粘贴
- android 复制、剪切、粘贴
- android的复制粘贴
- android 复制、剪切、粘贴
- Android 复制与粘贴
- Android复制粘贴功能
- Android实现复制粘贴
- android 粘贴 复制
- hdu 2795 Billboard(线段树单点更新)
- SDNU 1206.蚂蚁感冒 【代码如此简单,思维练习】【7月29】
- 颜色直方图,HSV直方图
- 浅谈Android数据库版本升级及数据的迁移
- ios 使用GCD 多线程 教程
- Android中的复制粘贴
- Qt 5.3 下OpenCV 2.4.11 开发 目录
- 函数range()与xrange()的比较
- 各种语言判断是否是手机设备
- nsvalue与nsnumber
- 什么是maven?
- 面试的时候的一些记录 - 不断更新
- 银行违规操作手法链接整理
- Django 中文路径不支持解决方法