安卓:实现复制粘贴功能
目录
一、介绍
(一)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,逻辑运算…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...

51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

解读《网络安全法》最新修订,把握网络安全新趋势
《网络安全法》自2017年施行以来,在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂,网络攻击、数据泄露等事件频发,现行法律已难以完全适应新的风险挑战。 2025年3月28日,国家网信办会同相关部门起草了《网络安全…...

脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)
一、OpenBCI_GUI 项目概述 (一)项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台,其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言,首次接触 OpenBCI 设备时,往…...
python爬虫——气象数据爬取
一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用: 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests:发送 …...