本文主要是介绍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 汇总了剪贴板框架。如需复制数据,应用需要将一个
图 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的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!