安卓文本复制粘贴的实现
来源:互联网 发布:有人虚拟串口软件 编辑:程序博客网 时间:2024/06/05 05:11
详细讲解如连接:http://www.cnblogs.com/mengdd/p/3572316.html
代码实现:
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 //newPlainText(label, text):返回ClipData对象,数据是文字text,描述是label,MIME类型是MIMETYPE_TEXT_PLAIN。 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); }}
EditText的长按事件会自动弹出上下文菜单,其中有“粘贴”“复制”“选择”的功能选项,应该是调用了clipData.getItemCount()方法获得要粘贴的数据。这个粘贴的功能系统已经实现了,不需要我们自己调用了。
The Clipboard Framework
当使用clipboard framework时,把数据放在一个剪切对象(clip object)里,然后这个对象会放在系统的剪贴板里。
clip object (剪切对象)可以有三种形式:
Text:文字字符串
文字是直接放在clip对象中,然后放在剪贴板里;粘贴这个字符串的时候直接从剪贴板拿到这个对象,把字符串放入你的应用存储中。
URI:一个Uri 对象。
复制的时候把一个Uri 对象放在一个clip对象中,然后再放在剪贴板里;粘贴的时候取出这个clip对象,得到Uri,把它解析为一个数据资源比如content provider,然后从资源中复制数据到应用存储中。
Intent: Intent对象。
这支持了复制应用快捷方式。
复制的时候把Intent对象放在clip对象中,再放入剪贴板;粘贴数据时,从clip对象中得到Intent对象,放入应用存储区域中。
剪贴板每次仅会持有一个clip对象,当应用放另一个clip对象进来时,前一个就消失了。
设计有效的复制粘贴功能
为了设计有效的复制粘贴功能,以下几点需要注意:
1.任何时间,都只有一个clip对象在剪贴板里。
新的复制操作都会覆盖前一个clip对象,因为用户可能从你的应用中退出,从其他应用中拷贝一个东西,所以你不能假定用户在你的应用中拷贝的上一个东西一定还放在剪贴板里。
2.一个clip对象,即ClipData中的多个ClipData.Item 对象是为了支持多选项的复制粘贴,而不是为了支持单选的多种形式。
你通常需要clip对象中的所有的项目,即ClipData.Item有一样的形式,比如都是文字,都是URI或都是Intent,而不是混合各种形式。
3.当你提供数据时,你可以提供不同的MIME表达方式。
将你支持的MIME类型加入到ClipDescription中去,然后在你的content provider中实现它。
4.当你从剪贴板得到数据时,你的应用有责任检查可用的MIME类型,然后决定使用哪一个。
即便有一个clip对象在剪贴板中并且用户要求粘贴,你的应用有可能不需要进行粘贴操作
你应该在MIME类型兼容的时候执行粘贴操作。你可以选择使用 coerceToText()方法将粘贴的内容转换为文字。
如果你的应用支持多种类型,你可以让用户自己选用哪一个。
- 安卓文本复制粘贴的实现
- 实现文本的 复制 粘贴 的创建
- Clipboard实现文件,文本的"复制","粘贴"
- 安卓的复制于粘贴剪切
- js实现文本的复制粘贴的功能
- iOS开发怎样实现全系统的文本复制粘贴
- 安卓中的复制粘贴
- 复制粘贴的实现
- android实现复制粘贴一项文本功能
- unity游戏android平台获取粘贴板的文本,实现复制粘贴功能
- 实现文本的复制和粘贴、文本的撤销和恢复(Swing JTextArea)
- GUI文本Textrea的复制与粘贴
- 远程桌面不能复制粘贴文本的解决办法
- ios 复制粘贴文本--UIPasteboard的使用
- vi编辑器下的文本复制、粘贴
- textarea支持复制粘贴的文本计数器
- C# 复制,粘贴文本
- 文本复制粘贴功能
- Vue.js(version 2)的时代已到来,前端攻城狮你准备好了吗?-------- 一、
- java程序员常用英语
- 网络传输介质
- Android软件集合
- 一键分享代码
- 安卓文本复制粘贴的实现
- Drools与Spring集成 登录测试
- test_05:JPEG file decode
- 计算两个时间点间相差的时间间隔
- Spring aop 简单总结
- ZOJ 3161 Damn Couple
- CSS样式
- java模拟spring ioc
- haproxy代理sqlserver