安卓:实现复制粘贴功能
目录
一、介绍
(一)ClipboardManager介绍
1、ClipboardManager常用方法:
2、获取 ClipboardManager实例
(二)、ClipData介绍
1、创建ClipData对象:
2、获取ClipData的信息:
3、ClipData.Item对象:
二、 例子
复制粘贴的辅助类ClipboardHelper :
MainActivity:
activity_main:
运行结果:
一、介绍
(一)ClipboardManager介绍
ClipboardManager是Android提供的一个系统服务,用于管理剪贴板内容。它允许您在应用程序之间复制和粘贴文本、链接、图像等数据。
1、ClipboardManager常用方法:
setPrimaryClip(ClipData clip):将指定的ClipData对象设置为主要剪贴板内容。这可以用于复制文本、链接、图像等到剪贴板。
ClipData clipData = ClipData.newPlainText("label", "要复制的文本");
clipboardManager.setPrimaryClip(clipData);
getPrimaryClip():获取主要剪贴板的内容。返回一个ClipData对象,其中包含主要剪贴板中的数据。
ClipData clipData = clipboardManager.getPrimaryClip();
if (clipData != null && clipData.getItemCount() > 0) {// 处理剪贴板内容
}
hasPrimaryClip():检查主要剪贴板是否有内容。如果剪贴板包含了数据,则返回true,否则返回false。
if (clipboardManager.hasPrimaryClip()) {ClipData clipData = clipboardManager.getPrimaryClip();if (clipData != null && clipData.getItemCount() > 0) {CharSequence text = clipData.getItemAt(0).getText();// 使用获取到的文本进行操作}
}
addPrimaryClipChangedListener(OnPrimaryClipChangedListener listener):注册一个剪贴板变化的监听器,以便在剪贴板内容发生变化时接收通知。
clipboardManager.addPrimaryClipChangedListener(new ClipboardManager.OnPrimaryClipChangedListener() {@Overridepublic void onPrimaryClipChanged() {// 剪贴板内容发生变化时执行相关操作}
});
2、获取 ClipboardManager实例
ClipboardManager clipboardManager = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
(二)、ClipData介绍
ClipData是Android中用于在剪贴板中存储数据的类。它是一个不可变的数据容器,可以包含一个或多个ClipData.Item对象,每个对象代表一项剪贴板内容。
1、创建ClipData对象:
可以使用ClipData类的静态方法newPlainText()或newUri()来创建一个新的ClipData对象。
newPlainText(CharSequence label, CharSequence text):创建一个纯文本的ClipData对象。需要提供标签(label)和要复制到剪贴板的文本内容(text)。
CharSequence label = "Label";
CharSequence text = "要复制的文本";
ClipData clipData = ClipData.newPlainText(label, text);
newUri(ContentResolver resolver, CharSequence label, Uri uri):创建一个包含URI的ClipData对象。需要提供标签(label)、内容解析器(ContentResolver)以及要复制到剪贴板的URI。
CharSequence label = "Label";
Uri uri = Uri.parse("https://example.com");
ClipData clipData = ClipData.newUri(getContentResolver(), label, uri);
2、获取ClipData的信息:
ClipData对象包含了剪贴板中的数据。您可以使用以下方法来访问和操作ClipData的内容:
getItemCount():获取ClipData中包含的项(ClipData.Item)的数量。
int itemCount = clipData.getItemCount();
getItemAt(int index):获取在指定索引处的ClipData.Item。
ClipData.Item item = clipData.getItemAt(index);
3、ClipData.Item对象:
ClipData.Item表示剪贴板中的一个项,可以是文本、链接或其他数据。通过ClipData的方法,您可以访问和操作每个Item对象:
getText():获取ClipData.Item中的文本内容。
CharSequence text = item.getText();
getUri():获取ClipData.Item中的URI。
Uri uri = item.getUri();
二、 例子
复制粘贴的辅助类ClipboardHelper :
package com.example.stardemo;import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;public class ClipboardHelper {private Context context;private ClipboardManager clipboardManager;public ClipboardHelper(Context context) {this.context = context;clipboardManager = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);}/*** 将文本复制到剪贴板** @param text 要复制的文本*/public void copyText(String text) {ClipData clipData = ClipData.newPlainText("text", text);clipboardManager.setPrimaryClip(clipData);}/*** 从剪贴板获取文本** @return 剪贴板中的文本*/public String getCopiedText() {if (clipboardManager.hasPrimaryClip()) {ClipData clipData = clipboardManager.getPrimaryClip();if (clipData != null && clipData.getItemCount() > 0) {CharSequence text = clipData.getItemAt(0).getText();return text.toString();}}return null;}}
MainActivity:
package com.example.stardemo;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;public class MainActivity extends AppCompatActivity {
TextView copeText,pasteText;
ClipboardHelper mClipboardHelper;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);copeText = findViewById(R.id.copyText);pasteText = findViewById(R.id.pasteText);mClipboardHelper = new ClipboardHelper(this);copeText.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {mClipboardHelper.copyText(copeText.getText().toString());Toast.makeText(MainActivity.this, "复制成功", Toast.LENGTH_SHORT).show();}});pasteText.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {pasteText.setText(mClipboardHelper.getCopiedText());Toast.makeText(MainActivity.this, "粘贴成功", Toast.LENGTH_SHORT).show();}});}
}
其中包含两个TextView:copyText和pasteText。在点击copyText时,它将使用ClipboardHelper类将文本复制到剪贴板中,并显示一个Toast消息表示复制成功。在点击pasteText时,它将从剪贴板中获取已复制的文本并设置为pasteText的文本。
activity_main:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><TextViewandroid:id="@+id/copyText"android:layout_width="115dp"android:layout_height="100dp"android:gravity="center"android:text="Hello World!"android:textSize="18sp"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"android:textColor="@color/black"app:layout_constraintVertical_bias="0.234" /><TextViewandroid:id="@+id/pasteText"android:background="@color/teal_200"android:textColor="@color/black"android:layout_width="115dp"android:layout_height="100dp"android:gravity="center"android:textSize="18sp"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"app:layout_constraintVertical_bias="0.551" /></androidx.constraintlayout.widget.ConstraintLayout>
运行结果:

相关文章:
安卓:实现复制粘贴功能
目录 一、介绍 (一)ClipboardManager介绍 1、ClipboardManager常用方法: 2、获取 ClipboardManager实例 (二)、ClipData介绍 1、创建ClipData对象: 2、获取ClipData的信息: 3、ClipData…...
jenkins pipeline项目
回到目录 将练习jenkins使用pipeline项目,结合k8s发布一个简单的springboot项目 前提:jenkins的环境和k8s环境都已经安装完成,提前准备了gitlab和一个简单的springboot项目 创建一个流水线项目 流水线中选择git,并选择gitlab的…...
机器学习笔记 - YOLO-NAS 最高效的目标检测算法之一
一、YOLO-NAS概述 YOLO(You Only Look Once)是一种对象检测算法,它使用深度神经网络模型,特别是卷积神经网络,来实时检测和分类对象。该算法首次在 2016 年由 Joseph Redmon、Santosh Divvala、Ross Girshick 和 Ali Farhadi 发表的论文《You Only Look Once: Unified, Re…...
Grafana集成prometheus(3.Grafana添加promethus数据)
添加数据库 选择Connections -> Datasources,点击Add New data source,填写Promitheus Server Url,点击 save & test完成配置 添加DashBorad 选择prometheus数据库选择code填入对应的查询公式(监控公式参考Prometheus监控公式)修改面板名称Ti…...
flutter开发实战-实现首页分类目录入口切换功能
。 在开发中经常遇到首页的分类入口,如美团的美食团购、打车等入口,左右切换还可以分页更多展示。 一、使用flutter_swiper_null_safety 在pubspec.yaml引入 # 轮播图flutter_swiper_null_safety: ^1.0.2二、实现swiper分页代码 由于我这里按照一页8…...
基于粒子群改进BP神经网络的时间序列预测,pso-bp时间序列预测
目录 摘要 BP神经网络的原理 BP神经网络的定义 BP神经网络的基本结构 BP神经网络的神经元 BP神经网络的激活函数, BP神经网络的传递函数 粒子群算法的原理及步骤 基于粒子群算法改进优化BP神经网络的时间序列预测 matlab代码 代写下载链接:https://download.csdn.net/downlo…...
std::string和std::wstring无法前向声明
在.h文件中需要声明返回类型为std::string的函数,这时候需要声明一下std::string,但是发现报错了。 这时候查了一下,发现std::string是typedef的,无法前向声明,这时候只能用include。其主要是考虑到如果为了让string前…...
论文阅读-Neighbor Contrastive Learning on Learnable Graph Augmentation(AAAI2023)
人为设计的图增强,可能会破坏原始图的拓扑结构,同时相邻节点被视为负节点,因此被推离锚点很远。然而,这与网络的同质性假设是矛盾的,即连接的节点通常属于同一类,并且应该彼此接近。本文提出了一种端到端的…...
PostgreSql 进程及内存结构
一、进程及内存架构 PostgreSQL 数据库运行时,使用如下命令可查询数据库进程,正对应上述结构图。 [postgreslocalhost ~]$ ps -ef|grep post postgres 8649 1 0 15:05 ? 00:00:00 /app/pg13/bin/postgres -D /data/pg13/data postgres …...
Elasticsearch 常用 HTTP 接口
本文记录工作中常用的关于 Elasticsearch 的 HTTP 接口,以作备用,读者也可以参考,会持续补充更新。开发环境基于 Elasticsearch v5.6.8、v1.7.5、v2.x。 集群状态 集群信息 1 2 3 4 5 6 7http://localhost:9200/_cluster/stats?pretty http…...
games106 homework1实现
games106 homework1 gltf介绍图: 骨骼动画 动画相关属性: 对GLTF的理解参照了这篇文章: glTF格式详解(动画) GLTF文件格式详解 buffer和bufferView对象用于引用动画数据。 buffer对象用来指定原始动画数据, bufferView对象用来引用buff…...
Pytorch使用VGG16模型进行预测猫狗二分类
目录 1. VGG16 1.1 VGG16 介绍 1.1.1 VGG16 网络的整体结构 1.2 Pytorch使用VGG16进行猫狗二分类实战 1.2.1 数据集准备 1.2.2 构建VGG网络 1.2.3 训练和评估模型 1. VGG16 1.1 VGG16 介绍 深度学习已经在计算机视觉领域取得了巨大的成功,特别是在图像分类任…...
安装nvm使用nvm管理node切换npm镜像后使用vue ui管理构建项目成功
如果安装nvm前已经单独安装过node.js的请先自行卸载原有node和环境变量里面的配置; 亲测成功,有哪些问题可以在评论区发消息或者私聊我 1、安装nvm的步骤如下 下载nvm安装包 在nvm的GitHub仓库,如下是国内镜像仓库: 点击这里跳…...
在线LaTeX公式编辑器编辑公式
在线LaTeX公式编辑器编辑公式 在编辑LaTex文档时候,需要输入公式,可以使用在线LaTeX公式编辑器编辑公式,其链接为: 在线LaTeX公式编辑器,https://www.latexlive.com/home 图1 在线LaTeX公式编辑器界面 图2 在线LaTeX公式编辑器…...
【C、C++】学习0
C、C学习路线 C语法:变量、条件、循环、字符串、数组、函数、结构体等指针、内存管理推荐书籍:《C Primer Plus》、《C和指针》、《C专家编程》 CC语言基础C的面向对象(封装、继承与多态)特性泛型模板STL等等推荐书籍(…...
python GUI nicegui初识一(登录界面创建)
最近尝试了python的nicegui库,虽然可能也有一些不足,但个人感觉对于想要开发不过对ui设计感到很麻烦的人来说是很友好的了,毕竟nicegui可以利用TailwindCSS和Quasar进行ui开发,并且也支持定制自己的css样式。 这里记录一下自己利…...
【单片机】51单片机串口的收发实验,串口程序
这段代码是使用C语言编写的用于8051单片机的串口通信程序。它实现了以下功能: 引入必要的头文件,包括reg52.h、intrins.h、string.h、stdio.h和stdlib.h。 定义了常量FSOC和BAUD,分别表示系统时钟频率和波特率。 定义了一个发送数据的函数…...
【bug】记录一次使用Swiper插件时loop属性和slidersPerView属性冲突问题
简言 最近在vue3使用swiper时,突然发现loop属性和slides-per-view属性同时存在启用时,loop生效,下一步只能生效一次的bug,上一步却是好的。非常滴奇怪。 解决过程 分析属性是否使用错误。 loop是循环模式,布尔型。 …...
云原生应用里的服务发现
服务定义: 服务定义是声明给定服务如何被消费者/客户端使用的方式。在建立服务之间的同步通信通道之前,它会与消费者共享。 同步通信中的服务定义: 微服务可以将其服务定义发布到服务注册表(或由微服务所有者手动发布)…...
【零基础学Rust | 基础系列 | 基础语法】变量,数据类型,运算符,控制流
文章目录 简介:一,变量1,变量的定义2,变量的可变性3,变量的隐藏 二、数据类型1,标量类型2,复合类型 三,运算符1,算术运算符2,比较运算符3,逻辑运算…...
如何快速掌握TensorFlow模块化架构:开发者终极指南
如何快速掌握TensorFlow模块化架构:开发者终极指南 【免费下载链接】community Stores documents used by the TensorFlow developer community 项目地址: https://gitcode.com/gh_mirrors/community1/community TensorFlow作为全球最流行的机器学习框架&…...
Cursor Pro高效激活工具:突破试用限制,全平台解锁AI编程无限可能
Cursor Pro高效激活工具:突破试用限制,全平台解锁AI编程无限可能 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Y…...
smcFanControl终极指南:让你的Intel Mac告别过热降频,性能全开
smcFanControl终极指南:让你的Intel Mac告别过热降频,性能全开 【免费下载链接】smcFanControl Control the fans of every Intel Mac to make it run cooler 项目地址: https://gitcode.com/gh_mirrors/smc/smcFanControl 你是否曾经在视频编辑或…...
数据主权时代:WeChatMsg如何让你的聊天记录真正属于你
数据主权时代:WeChatMsg如何让你的聊天记录真正属于你 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeCha…...
设计方案:核心框架搭建与落地实操全指南
当前很多团队在输出设计方案时容易陷入两个极端:要么过度追求创意忽略落地可行性,导致方案最终停留在概念阶段无法产生实际价值;要么完全照搬模板缺乏针对性,无法匹配业务的个性化需求。尤其是电商、新媒体、企业服务等领域的设计…...
Windows游戏多开检测实战:从进程枚举到信号量的5种实现与破解技巧
Windows游戏多开检测与破解:5种核心机制深度解析 在游戏开发和运营过程中,限制同一台设备上同时运行多个游戏实例是常见的需求。这种机制不仅关乎商业利益保护,也涉及游戏平衡性和反作弊系统的有效性。对于技术爱好者而言,理解这些…...
FLUX.1-schnell:如何彻底改变文本到图像生成的技术范式
FLUX.1-schnell:如何彻底改变文本到图像生成的技术范式 【免费下载链接】FLUX.1-schnell 项目地址: https://ai.gitcode.com/hf_mirrors/black-forest-labs/FLUX.1-schnell 在当今人工智能图像生成领域,高质量图像创作一直面临着效率与质量难以兼…...
5步解决开发者的Mac性能波动难题
5步解决开发者的Mac性能波动难题 【免费下载链接】Turbo-Boost-Switcher Turbo Boost disabler / enable app for Mac OS X 项目地址: https://gitcode.com/gh_mirrors/tu/Turbo-Boost-Switcher 问题溯源:为何你的Mac总是"时快时慢" 当你在进行视…...
轻量级跨平台安卓应用安装解决方案:APK-Installer高效实施指南
轻量级跨平台安卓应用安装解决方案:APK-Installer高效实施指南 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 在Windows环境中运行安卓应用长期面临资源占…...
大模型后训练:小白也能掌握的进阶秘籍,收藏提升技能!
后训练是提升大模型性能的关键步骤,通过微调和对齐技术优化预训练模型。文章详细解析了后训练的理论与方法,涵盖微调(SFT)、强化学习(RL)及对齐技术,并以Llama 3为例展示实际操作流程。核心内容…...
