Android提供的剪贴板框架,复制和粘贴不同类型的数据。数据可以是文本,图像,二进制流数据或其它复杂的数据类型。

Android提供ClipboardManager、ClipData.Item和ClipData库使用复制和粘贴的框架。为了使用剪贴板的框架,需要把数据转化为剪辑对象,然后把该对象为全系统剪贴板。

为了使用剪贴板,需要通过调用getSystemService()方法来实例化ClipboardManager的对象。它的语法如下:

  1. ClipboardManager myClipboard;
  2. myClipboard = (ClipboardManager)getSystemService(CLIPBOARD_SERVICE);

复制数据

需要做的下一件事就是通过调用ClipData类的数据方法的相应类型来实例化ClipData对象。如果文本数据在newPlainText方法被调用。必须将数据设置为剪贴板管理器对象的剪辑。它的语法如下:

  1. ClipData myClip;
  2. String text = "hello world";
  3. myClip = ClipData.newPlainText("text", text);
  4. myClipboard.setPrimaryClip(myClip);

ClipData对象可以采取这三种形式和下面的函数用于创建的那些形式。

Sr.No ClipData形式与方法
1 Text
newPlainText(label, text)
返回ClipData对象,其单个ClipData.Item对象包含一个文本字符串
2 URI
newUri(resolver, label, URI)
返回ClipData对象,其单ClipData.Item对象包含一个URI
3 Intent
newIntent(label, intent)
返回ClipData对象,其单ClipData.Item对象包含意图

粘贴数据

为了粘贴数据,先要通过调用getPrimaryClip()方法拿到剪辑。并从点击就可 ClipData.Item 对象的项目。从对象将得到数据。它的语法如下:

  1. ClipData abc = myClipboard.getPrimaryClip();
  2. ClipData.Item item = abc.getItemAt(0);
  3. String text = item.getText().toString();

除了这些方法,也有用于管理剪贴板框架提供 ClipboardManager类的其他方法。这些方法如下:

Sr.No 方法及说明
1 getPrimaryClip()
这个方法只是返回剪贴板上的当前主片段
2 getPrimaryClipDescription()
此方法返回剪贴板上的当前主剪辑的说明,但不是它的数据的一个拷贝
3 hasPrimaryClip()
如果当前剪贴板上的主要片段此方法返回true
4 setPrimaryClip(ClipData clip)
此方法将剪贴板上的当前主片段
5 setText(CharSequence text)
这种方法可直接用于复制文本到剪贴板
6 getText()
这种方法可直接用于获取剪贴板复制的文本

例子

这里有一个例子演示如何使用ClipboardManager类。它创建了一个基本的复制粘贴应用程序,可让您复制的文本,然后通过剪贴板粘贴。

为了试验这个例子,可以在实际设备或模拟器运行此程序。

Steps 描述
1 使用Android Studio创建Android应用程序,并将其命名为:Clipboard 。创建这个项目时确保目标SDK编译在Android SDK中的最新版本或使用更高级别的API。
2 修改 src/MainActivity.java 文件添加必要的代码
3 修改res/layout/activity_main.xml 添加相应的XML组件
4 修改 res/values/string. xml添加必要的字符串组成部分
5 运行应用程序并选择运行Android的设备,并在其上安装的应用和验证结果

以下是修改后的主活动文件的内容src/com.yiibai.clipboard/MainActivity.java.

  1. package com.example.clipboard;
  2.  
  3. import android.annotation.SuppressLint;
  4. import android.app.Activity;
  5. import android.content.ClipData;
  6. import android.content.ClipboardManager;
  7. import android.os.Bundle;
  8. import android.view.Menu;
  9. import android.view.View;
  10. import android.widget.EditText;
  11. import android.widget.Toast;
  12.  
  13. public class MainActivity extends Activity {
  14.  
  15. private ClipboardManager myClipboard;
  16. private ClipData myClip;
  17. private EditText copyField,pasteField;
  18. @Override
  19. protected void onCreate(Bundle savedInstanceState) {
  20. super.onCreate(savedInstanceState);
  21. setContentView(R.layout.activity_main);
  22. myClipboard = (ClipboardManager)getSystemService(CLIPBOARD_SERVICE);
  23. copyField = (EditText)findViewById(R.id.editText1);
  24. pasteField = (EditText)findViewById(R.id.editText2);
  25.  
  26. }
  27.  
  28. @SuppressLint("NewApi")
  29. public void copy(View view){
  30. String text = copyField.getText().toString();
  31. myClip = ClipData.newPlainText("text", text);
  32. myClipboard.setPrimaryClip(myClip);
  33. Toast.makeText(getApplicationContext(), "Text Copied",
  34. Toast.LENGTH_SHORT).show();
  35. }
  36.  
  37. @SuppressLint("NewApi")
  38. public void paste(View view){
  39. ClipData abc = myClipboard.getPrimaryClip();
  40. ClipData.Item item = abc.getItemAt(0);
  41. String text = item.getText().toString();
  42. pasteField.setText(text);
  43. Toast.makeText(getApplicationContext(), "Text Pasted",
  44. Toast.LENGTH_SHORT).show();
  45. }
  46.  
  47. @Override
  48. public boolean onCreateOptionsMenu(Menu menu) {
  49. // Inflate the menu; this adds items to the action bar if it is present.
  50. getMenuInflater().inflate(R.menu.main, menu);
  51. return true;
  52. }
  53.  
  54. }

以下是经修改res/layout/activity_main.xml 的内容

  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:paddingBottom="@dimen/activity_vertical_margin"
  6. android:paddingLeft="@dimen/activity_horizontal_margin"
  7. android:paddingRight="@dimen/activity_horizontal_margin"
  8. android:paddingTop="@dimen/activity_vertical_margin"
  9. tools:context=".MainActivity" >
  10.  
  11. <TextView
  12. android:id="@+id/textView1"
  13. android:layout_width="wrap_content"
  14. android:layout_height="wrap_content"
  15. android:layout_alignParentLeft="true"
  16. android:layout_alignParentTop="true"
  17. android:layout_marginLeft="25dp"
  18. android:layout_marginTop="19dp"
  19. android:text="@string/copytext"
  20. android:textAppearance="?android:attr/textAppearanceLarge" />
  21.  
  22. <EditText
  23. android:id="@+id/editText1"
  24. android:layout_width="wrap_content"
  25. android:layout_height="wrap_content"
  26. android:layout_alignLeft="@+id/textView1"
  27. android:layout_below="@+id/textView1"
  28. android:layout_marginTop="20dp"
  29. android:ems="10" >
  30.  
  31. <requestFocus />
  32. </EditText>
  33.  
  34. <TextView
  35. android:id="@+id/textView2"
  36. android:layout_width="wrap_content"
  37. android:layout_height="wrap_content"
  38. android:layout_alignLeft="@+id/editText1"
  39. android:layout_centerVertical="true"
  40. android:text="@string/pastetext"
  41. android:textAppearance="?android:attr/textAppearanceLarge" />
  42.  
  43. <Button
  44. android:id="@+id/button1"
  45. android:layout_width="wrap_content"
  46. android:layout_height="wrap_content"
  47. android:layout_alignLeft="@+id/editText1"
  48. android:layout_below="@+id/editText1"
  49. android:layout_marginLeft="65dp"
  50. android:layout_marginTop="20dp"
  51. android:onClick="copy"
  52. android:text="@string/copy" />
  53.  
  54. <EditText
  55. android:id="@+id/editText2"
  56. android:layout_width="wrap_content"
  57. android:layout_height="wrap_content"
  58. android:layout_alignLeft="@+id/textView2"
  59. android:layout_below="@+id/textView2"
  60. android:layout_marginTop="39dp"
  61. android:ems="10" />
  62.  
  63. <Button
  64. android:id="@+id/button2"
  65. android:layout_width="wrap_content"
  66. android:layout_height="wrap_content"
  67. android:layout_alignLeft="@+id/button1"
  68. android:layout_below="@+id/editText2"
  69. android:layout_marginTop="34dp"
  70. android:onClick="paste"
  71. android:text="@string/paste" />
  72.  
  73. </RelativeLayout>

以下是 res/values/string.xml 的内容

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <resources>
  3.  
  4. <string name="app_name">Clipboard</string>
  5. <string name="action_settings">Settings</string>
  6. <string name="hello_world">Hello world!</string>
  7. <string name="copy">Copy Text</string>
  8. <string name="paste">Paste Text</string>
  9. <string name="copytext">Text to copy</string>
  10. <string name="pastetext">Copied Text</string>
  11. </resources>

以下是 AndroidManifest.xml 文件的内容:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3. package="com.yiibai.clipboard"
  4. android:versionCode="1"
  5. android:versionName="1.0" >
  6.  
  7. <uses-sdk
  8. android:minSdkVersion="8"
  9. android:targetSdkVersion="17" />
  10.  
  11. <application
  12. android:allowBackup="true"
  13. android:icon="@drawable/ic_launcher"
  14. android:label="@string/app_name"
  15. android:theme="@style/AppTheme" >
  16. <activity
  17. android:name="com.yiibai.clipboard.MainActivity"
  18. android:label="@string/app_name" >
  19. <intent-filter>
  20. <action android:name="android.intent.action.MAIN" />
  21.  
  22. <category android:name="android.intent.category.LAUNCHER" />
  23. </intent-filter>
  24. </activity>
  25. </application>
  26.  
  27. </manifest>

让我们试着来运行修改剪贴板应用程序。安装AVD并启动程序,如果一切设置和应用程序都没有问题,它会显示以下仿真器窗口:

现在只是在文本输入任何文字复制字段,然后选择复制文本按钮。下面的通知将显示其显示如下:

现在,只要按下按钮,粘贴,会看到它被复制,现在粘贴复制的文本的字段中的文本。它如下所示:

 

Android Clipboard(复制/剪贴板)的更多相关文章

  1. clipboard复制剪贴板功能,以及用requirejs时报错---Uncaught ReferenceError: Clipboard is not defined

    zeroclipboard是走的flash插件,手机浏览器是不支持的,所以不得不舍弃之,用clipboard,clipboard不需要flash就可以完成复制剪切等功能,而且可以兼容pc,移动端,下面 ...

  2. 兼容ios和Android的复制js代码

    //2种方法本人全部亲测有效 方法1:比较简单 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ...

  3. Android ListView复制、删除的实现

    适配器MyAdapter: package com.zihao.adapter; import java.util.List; import com.zihao.popdemo.R; import c ...

  4. Android Studio复制项目作为一个新的工程

    Android Studio复制项目作为一个新的工程 等待..... 好了 可能会安装失败 Failed to finalize session : INSTALL_FAILED_INVALID_AP ...

  5. jquery.zclip—复制剪贴板(兼容各大浏览器)

    开始前说两句 WEB开发中,要让用户复制页面中的一段代码.URL地址等信息,为了避免用户拖动鼠标再进行右键复制操作而可能出现的差错,我们可以直接在页面中放置一个复制按钮,只需要轻轻一点这个复制按钮,内 ...

  6. eclips android项目复制

    1.将要复制的项目从workspace里面copy到另外一个目录 2.将这个项目重命名 3.使用android tool 里的包名修改工具(rename appliction package),修改报 ...

  7. 修改Delphi 10.1.2 edit控件在android的复制、剪切和粘贴样式

    Delphi 10.1.2 edit控件在android默认的复制.剪切和粘贴样式太丑,经悟能-DelphiTeacher的提示,用最简单的代码修改后稍有改观. 默认的样式: 修改后的样式: 修改FM ...

  8. js点击复制剪贴板

    代码用原生写的.工作中用的angular,所以如果有用angular的话,请把js代码copyToClipboard函数中的document.getElementById(elementId).inn ...

  9. 学习了clipboard复制剪切插件的使用

    第一步:引入clipboard插件JS <script src="dist/clipboard.min.js"></script> 第二步:在HTML代码加 ...

随机推荐

  1. VS2010 快捷键--我的总结

    启动VS,可在运行中输入“devenv”: [窗口快捷键] Ctrl+Alt+L 解决方案管理器 Ctrl+W,C: 类视图      Ctrl+W,O: 输出视图      Ctrl+W,T: 任务 ...

  2. springxml配置构造函数入参

    springxml配置构造函数入参有深入的理解 集合mockito创建对象的方法.功能等同于创建对象的代码. spring配置文件中定义bean的好处 便于集中管理,系统任何地方都可以引用使用.如果不 ...

  3. 向ASP.NET服务器控件中嵌入CSS资源

    Step1:于[项目解决方案]中右键新建[ASP.NET服务器控件]项目 Step2:于项目中添加[Resources]文件夹,于该文件夹下添加[CSS文件] Step3:单击该CSS文件,并将[属性 ...

  4. webclient乱码问题

    我的备注:这个方法可以得到相关页面的源代码,查看页面编码,浏览器中右键>选择编码就看到所用的编码类型了 webclient在调用DownloadData或者DownloadString的时候请求 ...

  5. 关于数据库中varchar/nvarchar类型数据的获取注意事项

    当在页面后台获取数据库表中某字段的数据时,需注意该数据的类型.防止因实际数据的字符长度因达不到指定数据类型规定的字符长度而导致空格的占位符. 比如: MSSQL中某一表的结构如下:   表中的数据: ...

  6. win8发布 wcf问题

    WCF services don’t run on IIS 8 with the default configuration, because the webserver doesn’t know, ...

  7. linux 第二天

    文件权限和用户组 groupadd 组名 groupadd policeman 查看组 vi /etc/group cat /etc/group 创建用户,并同时指定将该用户分配到哪个组 userad ...

  8. Swift和OC混编时, 关于@objc的作用

    Objective-C 和 Swift 在底层使用的是两套完全不同的机制,Cocoa 中的 Objective-C 对象是基于运行时的,它从骨子里遵循了 KVC (Key-Value Coding,通 ...

  9. 删除MSMQ中的消息队列时"访问被拒绝的错误"

    删除MSMQ中消息队列时出现 google之,发现也没有找到解决方法,自己在琢磨一下,一般出现这种问题的都是权限问题,因此查看了一下属性,果然如此 此消息队列是使用Windows服务创建的 解决办法: ...

  10. nodejs调试

    1.通过debug命令进行调试 node debug app.js 运行的结果: 在debug状态下输入"repl"命令可以评估变量和表达式的值 按下'CTRL+C'可以退出rep ...