android 复制字符串,复制和粘贴  |  Android 开发者  |  Android Developers

2023-12-19 00:40

本文主要是介绍android 复制字符串,复制和粘贴  |  Android 开发者  |  Android Developers,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Android 提供了一个强大的基于剪贴板的框架,用于复制和粘贴。它支持简单和复杂的数据类型,包括文本字符串、复杂数据结构、文本、二进制流数据,甚至应用资源。简单的文本数据直接存储在剪贴板中,而复杂的数据则存储为引用,执行粘贴操作的应用使用 Content Provider 对其进行解析。复制和粘贴既可以在应用内进行,也可以在实现了该框架的应用之间进行。

由于该框架的一部分使用 Content Provider,因此本主题假设您对 Android Content Provider API 已有一定了解。我们在 Content Provider 这一主题中对该 API 进行了介绍。

剪贴板框架

使用剪贴板框架时,您会将数据放入一个剪贴对象中,然后将该剪贴对象放到系统级剪贴板中。剪贴对象可以采用以下三种形式之一:

Text

一个文本字符串。您可以直接将字符串放入剪贴对象中,然后将剪贴对象放到剪贴板中。如需粘贴字符串,您需要从剪贴板获取剪贴对象,然后将字符串复制到应用的存储空间。

URI

一个

Intent

一个

剪贴板一次只保留一个剪贴对象。当应用将一个剪贴对象放到剪贴板时,上一个剪贴对象会消失。

如果您希望允许用户将数据粘贴到您的应用中,则无需处理所有类型的数据。您可以先检查剪贴板中的数据,然后再向用户提供粘贴数据的选项。除了具有特定的数据形式之外,剪贴对象还包含可告知您可用的 MIME 类型的元数据。此元数据可以帮助您确定应用是否可以利用剪贴板数据做一些有用的事情。例如,如果您有一个主要处理文本的应用,不妨忽略包含 URI 或 Intent 的剪贴对象。

此外,您可能还希望无论剪贴板中的数据采用何种形式,用户都可以粘贴文本。为此,您可以将剪贴板数据强制转换为文本表示形式,然后粘贴相应文本。将剪贴板数据强制转换为文本部分对这一点进行了介绍。

剪贴板类

这一部分介绍了剪贴板框架所使用的类。

ClipboardManager

在 Android 系统中,系统剪贴板由全局

ClipData、ClipData.Item 和 ClipDescription

如需将数据添加到剪贴板,您需要创建一个

Text

URI

一个

Intent

一个

您可以向一个剪切添加多个

ClipData 便捷方法

将剪贴板数据强制转换为文本

即使您的应用仅处理文本,您也可以从剪贴板复制非文本数据,只需使用

Text

URI

如果 如果此 URI 是内容 URI,并且提供程序可以返回文本流,则

如果此 URI 是内容 URI,但提供程序不提供文本流,则

如果此 URI 不是内容 URI,则

Intent

图 1 汇总了剪贴板框架。如需复制数据,应用需要将一个

1b6b6f228b36d1cb27991551cb33519a.png

图 1. Android 剪贴板框架

复制到剪贴板

如前所述,如需将数据复制到剪贴板,您需要获取全局

如果您要使用内容 URI 复制数据,请设置一个 Content Provider。

Note Pad 示例应用是使用 Content Provider 进行复制和粘贴的一个例子。NotePadProvider 类实现了相应 Content Provider。NotePad 类定义了 Provider 与其他应用之间的约定,包括受支持的 MIME 类型。

获取系统剪贴板:

Kotlin

when(menuItem.itemId) {

...

R.id.menu_copy -> { // if the user selects copy

// Gets a handle to the clipboard service.

val clipboard = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager

}

}Java

...

// if the user selects copy

case R.id.menu_copy:

// Gets a handle to the clipboard service.

ClipboardManager clipboard = (ClipboardManager)

getSystemService(Context.CLIPBOARD_SERVICE);

将数据复制到新的

对于 Text

Kotlin

// Creates a new text clip to put on the clipboard

val clip: ClipData = ClipData.newPlainText("simple text", "Hello, World!")Java

// Creates a new text clip to put on the clipboard

ClipData clip = ClipData.newPlainText("simple text", "Hello, World!");

对于 URI

以下代码段通过将记录 ID 编码到提供程序的内容 URI 来构建 URI。在 URI 中对标识符进行编码部分对此方法进行了更详细的说明:

Kotlin

// Creates a Uri based on a base Uri and a record ID based on the contact's last name

// Declares the base URI string

const val CONTACTS = "content://com.example.contacts"

// Declares a path string for URIs that you use to copy data

const val COPY_PATH = "/copy"

// Declares the Uri to paste to the clipboard

val copyUri: Uri = 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.

val clip: ClipData = ClipData.newUri(contentResolver, "URI", copyUri)Java

// 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

以下代码段为应用构建一个 Intent,然后将其放入剪贴对象中:

Kotlin

// Creates the Intent

val appIntent = Intent(this, com.example.demo.myapplication::class.java)

...

// Creates a clip object with the Intent in it. Its label is "Intent" and its data is

// the Intent object created previously

val clip: ClipData = ClipData.newInten

这篇关于android 复制字符串,复制和粘贴  |  Android 开发者  |  Android Developers的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/510353

相关文章

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优

MySQL 获取字符串长度及注意事项

《MySQL获取字符串长度及注意事项》本文通过实例代码给大家介绍MySQL获取字符串长度及注意事项,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录mysql 获取字符串长度详解 核心长度函数对比⚠️ 六大关键注意事项1. 字符编码决定字节长度2

Android DataBinding 与 MVVM使用详解

《AndroidDataBinding与MVVM使用详解》本文介绍AndroidDataBinding库,其通过绑定UI组件与数据源实现自动更新,支持双向绑定和逻辑运算,减少模板代码,结合MV... 目录一、DataBinding 核心概念二、配置与基础使用1. 启用 DataBinding 2. 基础布局

Android ViewBinding使用流程

《AndroidViewBinding使用流程》AndroidViewBinding是Jetpack组件,替代findViewById,提供类型安全、空安全和编译时检查,代码简洁且性能优化,相比Da... 目录一、核心概念二、ViewBinding优点三、使用流程1. 启用 ViewBinding (模块级

Conda虚拟环境的复制和迁移的四种方法实现

《Conda虚拟环境的复制和迁移的四种方法实现》本文主要介绍了Conda虚拟环境的复制和迁移的四种方法实现,包括requirements.txt,environment.yml,conda-pack,... 目录在本机复制Conda虚拟环境相同操作系统之间复制环境方法一:requirements.txt方法

Springboot3+将ID转为JSON字符串的详细配置方案

《Springboot3+将ID转为JSON字符串的详细配置方案》:本文主要介绍纯后端实现Long/BigIntegerID转为JSON字符串的详细配置方案,s基于SpringBoot3+和Spr... 目录1. 添加依赖2. 全局 Jackson 配置3. 精准控制(可选)4. OpenAPI (Spri

使用Python实现base64字符串与图片互转的详细步骤

《使用Python实现base64字符串与图片互转的详细步骤》要将一个Base64编码的字符串转换为图片文件并保存下来,可以使用Python的base64模块来实现,这一过程包括解码Base64字符串... 目录1. 图片编码为 Base64 字符串2. Base64 字符串解码为图片文件3. 示例使用注意

Linux使用scp进行远程目录文件复制的详细步骤和示例

《Linux使用scp进行远程目录文件复制的详细步骤和示例》在Linux系统中,scp(安全复制协议)是一个使用SSH(安全外壳协议)进行文件和目录安全传输的命令,它允许在远程主机之间复制文件和目录,... 目录1. 什么是scp?2. 语法3. 示例示例 1: 复制本地目录到远程主机示例 2: 复制远程主

Mysql的主从同步/复制的原理分析

《Mysql的主从同步/复制的原理分析》:本文主要介绍Mysql的主从同步/复制的原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录为什么要主从同步?mysql主从同步架构有哪些?Mysql主从复制的原理/整体流程级联复制架构为什么好?Mysql主从复制注意

Python实现自动化Word文档样式复制与内容生成

《Python实现自动化Word文档样式复制与内容生成》在办公自动化领域,高效处理Word文档的样式和内容复制是一个常见需求,本文将展示如何利用Python的python-docx库实现... 目录一、为什么需要自动化 Word 文档处理二、核心功能实现:样式与表格的深度复制1. 表格复制(含样式与内容)2