Android Clipboard(复制/剪贴板)
Android提供的剪贴板框架,复制和粘贴不同类型的数据。数据可以是文本,图像,二进制流数据或其它复杂的数据类型。
Android提供ClipboardManager、ClipData.Item和ClipData库使用复制和粘贴的框架。为了使用剪贴板的框架,需要把数据转化为剪辑对象,然后把该对象为全系统剪贴板。
为了使用剪贴板,需要通过调用getSystemService()方法来实例化ClipboardManager的对象。它的语法如下:
ClipboardManager myClipboard;
myClipboard = (ClipboardManager)getSystemService(CLIPBOARD_SERVICE);
复制数据
需要做的下一件事就是通过调用ClipData类的数据方法的相应类型来实例化ClipData对象。如果文本数据在newPlainText方法被调用。必须将数据设置为剪贴板管理器对象的剪辑。它的语法如下:
ClipData myClip;
String text = "hello world";
myClip = ClipData.newPlainText("text", text);
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 对象的项目。从对象将得到数据。它的语法如下:
ClipData abc = myClipboard.getPrimaryClip();
ClipData.Item item = abc.getItemAt(0);
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.
package com.example.clipboard; import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast; public class MainActivity extends Activity { private ClipboardManager myClipboard;
private ClipData myClip;
private EditText copyField,pasteField;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myClipboard = (ClipboardManager)getSystemService(CLIPBOARD_SERVICE);
copyField = (EditText)findViewById(R.id.editText1);
pasteField = (EditText)findViewById(R.id.editText2); } @SuppressLint("NewApi")
public void copy(View view){
String text = copyField.getText().toString();
myClip = ClipData.newPlainText("text", text);
myClipboard.setPrimaryClip(myClip);
Toast.makeText(getApplicationContext(), "Text Copied",
Toast.LENGTH_SHORT).show();
} @SuppressLint("NewApi")
public void paste(View view){
ClipData abc = myClipboard.getPrimaryClip();
ClipData.Item item = abc.getItemAt(0);
String text = item.getText().toString();
pasteField.setText(text);
Toast.makeText(getApplicationContext(), "Text Pasted",
Toast.LENGTH_SHORT).show();
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
} }
以下是经修改res/layout/activity_main.xml 的内容
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" > <TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="25dp"
android:layout_marginTop="19dp"
android:text="@string/copytext"
android:textAppearance="?android:attr/textAppearanceLarge" /> <EditText
android:id="@+id/editText1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView1"
android:layout_below="@+id/textView1"
android:layout_marginTop="20dp"
android:ems="10" > <requestFocus />
</EditText> <TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/editText1"
android:layout_centerVertical="true"
android:text="@string/pastetext"
android:textAppearance="?android:attr/textAppearanceLarge" /> <Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/editText1"
android:layout_below="@+id/editText1"
android:layout_marginLeft="65dp"
android:layout_marginTop="20dp"
android:onClick="copy"
android:text="@string/copy" /> <EditText
android:id="@+id/editText2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView2"
android:layout_below="@+id/textView2"
android:layout_marginTop="39dp"
android:ems="10" /> <Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/button1"
android:layout_below="@+id/editText2"
android:layout_marginTop="34dp"
android:onClick="paste"
android:text="@string/paste" /> </RelativeLayout>
以下是 res/values/string.xml 的内容
<?xml version="1.0" encoding="utf-8"?>
<resources> <string name="app_name">Clipboard</string>
<string name="action_settings">Settings</string>
<string name="hello_world">Hello world!</string>
<string name="copy">Copy Text</string>
<string name="paste">Paste Text</string>
<string name="copytext">Text to copy</string>
<string name="pastetext">Copied Text</string>
</resources>
以下是 AndroidManifest.xml 文件的内容:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.yiibai.clipboard"
android:versionCode="1"
android:versionName="1.0" > <uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" /> <application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.yiibai.clipboard.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application> </manifest>
让我们试着来运行修改剪贴板应用程序。安装AVD并启动程序,如果一切设置和应用程序都没有问题,它会显示以下仿真器窗口:
现在只是在文本输入任何文字复制字段,然后选择复制文本按钮。下面的通知将显示其显示如下:
现在,只要按下按钮,粘贴,会看到它被复制,现在粘贴复制的文本的字段中的文本。它如下所示:
Android Clipboard(复制/剪贴板)的更多相关文章
- clipboard复制剪贴板功能,以及用requirejs时报错---Uncaught ReferenceError: Clipboard is not defined
zeroclipboard是走的flash插件,手机浏览器是不支持的,所以不得不舍弃之,用clipboard,clipboard不需要flash就可以完成复制剪切等功能,而且可以兼容pc,移动端,下面 ...
- 兼容ios和Android的复制js代码
//2种方法本人全部亲测有效 方法1:比较简单 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ...
- Android ListView复制、删除的实现
适配器MyAdapter: package com.zihao.adapter; import java.util.List; import com.zihao.popdemo.R; import c ...
- Android Studio复制项目作为一个新的工程
Android Studio复制项目作为一个新的工程 等待..... 好了 可能会安装失败 Failed to finalize session : INSTALL_FAILED_INVALID_AP ...
- jquery.zclip—复制剪贴板(兼容各大浏览器)
开始前说两句 WEB开发中,要让用户复制页面中的一段代码.URL地址等信息,为了避免用户拖动鼠标再进行右键复制操作而可能出现的差错,我们可以直接在页面中放置一个复制按钮,只需要轻轻一点这个复制按钮,内 ...
- eclips android项目复制
1.将要复制的项目从workspace里面copy到另外一个目录 2.将这个项目重命名 3.使用android tool 里的包名修改工具(rename appliction package),修改报 ...
- 修改Delphi 10.1.2 edit控件在android的复制、剪切和粘贴样式
Delphi 10.1.2 edit控件在android默认的复制.剪切和粘贴样式太丑,经悟能-DelphiTeacher的提示,用最简单的代码修改后稍有改观. 默认的样式: 修改后的样式: 修改FM ...
- js点击复制剪贴板
代码用原生写的.工作中用的angular,所以如果有用angular的话,请把js代码copyToClipboard函数中的document.getElementById(elementId).inn ...
- 学习了clipboard复制剪切插件的使用
第一步:引入clipboard插件JS <script src="dist/clipboard.min.js"></script> 第二步:在HTML代码加 ...
随机推荐
- WinHeap.H
网上找到的,对 Windows Heap 有详细的定义. // file winheap.h typedef void VOID; typedef unsigned __int8 UINT8; typ ...
- setTimeout()与setInterval()方法区别介绍
计时器setTimeout()和setInterval()两个都是js的计时功能的函数两个有些区别,下面为大家简单介绍下,希望对大家有所帮助 计时器setTimeout()和setInterval ...
- java 格式判断
public class FormatChecker { /** * 判断是否含有汉字 * @param string */ public static boolean containChinese( ...
- CRC32校验的用法
CRC32校验数据的完整性 这里的数据包括字符串.文件,还有哪些? 文件校验相当于下载大型软件,有md5加密结果.这里的用途是什么?
- BIOS+MBR模式 VS UEFI+GPT模式
EFI与MBR启动的区别 大硬盘和WIN8系统,让我们从传统的BIOS+MBR模式升级到UEFI+GPT模式,现在购买的主流电脑,都是预装WIN8系统,为了更好的支持2TB硬盘 ,更快速的启动win ...
- C/C++中的&&和||运算符
代码: #include <iostream> #include <cstdio> using namespace std; int main(){ ,b=,c=-,d=; d ...
- C#中的委托(Delegate)和事件(Event)
原文地址:C#中的委托(Delegate)和事件(Event) 作者:jiyuan51 把C#中的委托(Delegate)和事件(Event)放到现在讲是有目的的:给下次写的设计模式--观察者(Obs ...
- mysql innodb myisam 主要区别与更改方法
一.主要区别 1.事务处理 innodb 支持事务功能,myisam 不支持. Myisam 的执行速度更快,性能更好. 2.select ,update ,insert ,delete 操作 ...
- PHPCMS v9构建模块 - 实例之企业服务模块
下面开始第一个实例,企业服务模块,这是个比较简单的模块,做一个抛砖的作用. 模块功能分析:企业服务,企业填写招聘申请表,管理审核之后,展示作为招聘通知的功能. ■1.文件分布 modules文 ...
- ionic框架,快速开发webAPP神器。
官网地址 http://www.ionicframework.com/ 这个国外框架已经很火了.会使用插件的话更好,例如支付宝支付插件,调用摄像头拍照,二维码扫描,通讯录,文件上传,推送信息等等. 最 ...