android文本长按复制

android文本长按复制

    • 📖1. 长按直接复制
      • ✅步骤一:定义一个TextView
      • ✅步骤二:为TextView注册长按事件
      • ✅步骤三:弹出系统复制功能
    • 📖2. 长按弹框确认复制
      • ✅步骤一:定义一个TextView
      • ✅步骤二:封装PopupWindow弹框方法
      • ✅步骤三:为TextView注册长按事件
      • ✅步骤四:调用弹框复制确认方法

📖1. 长按直接复制

11

✅步骤一:定义一个TextView

<TextView
    android:id="@+id/tv_content"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="我是测试文本"
    android:textSize="16sp"/>

✅步骤二:为TextView注册长按事件

在Activity或Fragment中找到TextView并为其注册长按事件,代码如下:

TextView tvContent = findViewById(R.id.tv_content);
tvContent.setOnLongClickListener(new View.OnLongClickListener() {
    @Override
    public boolean onLongClick(View v) {
        // 在这里处理长按事件
        return true;
    }
});

✅步骤三:弹出系统复制功能

在长按事件中弹出系统复制功能,代码如下:

TextView tvContent = findViewById(R.id.tv_content);
tvContent.setOnLongClickListener(new View.OnLongClickListener() {
    @Override
    public boolean onLongClick(View v) {
        ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
        ClipData clip = ClipData.newPlainText("text", tvContent.getText());
        clipboard.setPrimaryClip(clip);
        Toast.makeText(MainActivity.this, "文本已复制", Toast.LENGTH_SHORT).show();
        return true;
    }
});

注意:如何在适配器中使用,需要使用上下文Context.getSystemService方法即可

📖2. 长按弹框确认复制

22

✅步骤一:定义一个TextView

<TextView
    android:id="@+id/tv_content"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="我是测试文本"
    android:textSize="16sp"/>

✅步骤二:封装PopupWindow弹框方法

1.定义layout_popup_window.xml布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <Button
        android:id="@+id/btn_copy"
        android:layout_width="wrap_content"
        android:layout_height="45dp"
        android:text="复制文本" />

</LinearLayout>

2.可创建一个工具类,比如SystemUtils中去封装这个方法,好处就是复用性强,也可直接定义在要使用的页面中

public class SystemUtils{
     /**
     * 弹框复制文本-文本下面位置
     * @param context 上下文
     * @param anchorView 被复制文本视图
     * @param textToCopy 被复制的文本内容
     */
    public static void showCopyPopupWindow(final Context context, final View anchorView, final String textToCopy) {
        // 创建 PopupWindow
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View popupView = inflater.inflate(R.layout.layout_popup_window, null);
        Button copyButton = popupView.findViewById(R.id.btn_copy);
        final PopupWindow popupWindow = new PopupWindow(popupView, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, true);

        // 设置按钮点击事件
        copyButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 获取剪贴板管理器
                ClipboardManager clipboardManager = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
                // 创建 ClipData 对象
                ClipData clipData = ClipData.newPlainText("text", textToCopy);
                // 将 ClipData 对象放入剪贴板
                clipboardManager.setPrimaryClip(clipData);
                Toast.makeText(context, "复制成功", Toast.LENGTH_SHORT).show();
                // 关闭 PopupWindow
                popupWindow.dismiss();
            }
        });

        // 计算文本的位置
        int[] location = new int[2];
        anchorView.getLocationInWindow(location);
        int x = location[0];
        int y = location[1] + anchorView.getHeight();

        // 显示 PopupWindow
        popupWindow.showAtLocation(anchorView, Gravity.NO_GRAVITY, x, y);
    }
}

✅步骤三:为TextView注册长按事件

TextView tvContent = findViewById(R.id.tv_content);
tvContent.setOnLongClickListener(new View.OnLongClickListener() {
    @Override
    public boolean onLongClick(View v) {
        // 在这里处理长按事件
        return true;
    }
});

✅步骤四:调用弹框复制确认方法

TextView tvContent = findViewById(R.id.tv_content);
tvContent.setOnLongClickListener(new View.OnLongClickListener() {
    @Override
    public boolean onLongClick(View view) {
        // 在这里处理长按事件
        final String textToCopy = ((TextView) view).getText().toString();
        SystemUtils.showCopyPopupWindow(view.getContext(), view, textToCopy);
        return true;
    }
});

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/784940.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vue详解

目录 ​编辑 常用指令 v-for v-bind v-if & v-show v-if v-show v-on v-model Vue生命周期 ​编辑 Axios Axios使用步骤 Axios-请求方式别名 Vue简单案例 常用指令 指令:HTML标签上带有 v-前缀的特殊属性&#xff0c;不同的指令具有不同的含义&#xff0c;可…

2.5 C#视觉程序开发实例1----CamManager实现模拟相机采集图片(Form_Vision部分代码)

2.5 C#视觉程序开发实例1----CamManager实现模拟相机采集图片(Form_Vision部分代码) 1 目标效果视频 CamManager 2 增加一个class IMG_BUFFER 用来管理采集的图片 // <summary> /// IMG_BUFFER 用来管理内存图片的抓取队列 /// </summary> public class IMG_BUFF…

imx6ull/linux应用编程学习(14) MQTT基础知识

什么是mqtt&#xff1f; 与HTTP 协议一样&#xff0c; MQTT 协议也是应用层协议&#xff0c;工作在 TCP/IP 四层模型中的最上层&#xff08;应用层&#xff09;&#xff0c;构建于 TCP/IP协议上。 MQTT 最大优点在于&#xff0c;可以以极少的代码和有限的带宽&#xff0c;为连接…

electron在VSCode和IDEA及webStrom等编辑器控制台打印日志乱码

window10环境下设置 1.打开Windows设置 2.打开时间和语言&#xff0c;选择语言菜单、如何点击管理语言设置 3.打开之后选择管理&#xff0c;选择更改系统区域设置&#xff0c;把Beta版&#xff1a;使用Unicode UTF-8提供全球语言支持 勾上&#xff0c;点击确定&#xff0c;…

后端学习(一)

添加数据库包&#xff1a; 数据库连接时 发生错误&#xff1a; 解决方式&#xff1a; SqlConnection conn new SqlConnection("serverlocalhost;databaseMyBBSDb;uidsa;pwd123456;Encryptfalse;") ;conn.Open();SqlCommand cmd new SqlCommand("SELECT * FROM…

Debug-017-elementUI-el-cascader组件首次选择选项不触发表单的自定义校验

前情提要&#xff1a; 今天维护一个表单校验的时候发现一件事情&#xff0c;就是在表单中使用了 el-cascader组件&#xff0c;希望根据接口返回数据去动态校验一下这里面的选项&#xff0c;符合逻辑就通过自定义的表单校验&#xff0c;不符合就在这一项的下面标红提示。做的时候…

OpenHarmony 入门——单元测试UnitTest快速入门

引言 OpenHarmony 的单元测试&#xff08;UnitTest&#xff09;是一个关键的软件开发过程&#xff0c;它确保代码的各个部分能够按预期工作&#xff0c;OpenHarmony的测试框架中提供了很多种的单元测试&#xff0c;今天简单介绍下UnitTest 类型的TDD测试。 OpenHarmony 的TDD …

群体优化算法---文化算法介绍,求解背包问题

介绍 文化算法&#xff08;Cultural Algorithm, CA&#xff09;是一种基于文化进化理论的优化算法&#xff0c;首次由Robert G. Reynolds在20世纪90年代提出。文化算法通过模拟人类社会中的文化进化过程&#xff0c;利用个体与群体的双重进化机制来解决优化问题。其基本思想是…

MGRE复习综合实验

R1与R5之间使用ppp的pap认证&#xff0c;R5为主认证方&#xff1a; R1 interface Serial4/0/0ip address 15.0.0.1 8link-protocol pppppp pap local-user huawei password cipher 123456 R5 aaalocal-user huawei password cipher 123456local-user huawei service-type…

海外媒体发稿-全媒体百科

全球知名媒体机构 在全球范围内&#xff0c;有许多知名的新闻机构负责报道世界各地的新闻事件。以下是一些国外常见的媒体机构&#xff1a; AP&#xff08;美联社&#xff09;合众国际社&#xff08;UPI&#xff09;AFP(法新社)EFE&#xff08;埃菲通讯社&#xff09;Europa …

JavaSE学习笔记第二弹——对象和多态(上)

目录 面向对象基础 面向对象程序设计的定义 类的基本结构 成员变量 成员方法 方法定义与使用 设计练习 方法重载 构造方法 静态变量和静态方法 String和StringBuilder 基本含义 区别 总结 今天我们继续来学习JavaSE&#xff0c;扩展和Java相关的知识&#xff0c;…

【软件分享】气象绘图软件Panoply

气象是大气中的物理现象&#xff0c;气象要素则是表明大气物理状况的要素&#xff0c;主要的气象要素有降水、风、气压、湿度等。为了研究气象要素在空间上的分布和运动状况&#xff0c;我们需要对气象要素进行空间上进行可视化&#xff0c;这个时候就需要气象领域的一些的绘图…

FastReport 指定sql,修改数据源 ( 非DataSet修改 )

FastReport 指定sql&#xff0c;修改数据源&#xff0c;非DataSet修改 介绍报告文件&#xff1a; codetest.frx 文件核心代码&#xff1a;&#xff08;扩展&#xff09;小结一下&#xff1a; 介绍 在FastReport中&#xff0c;经常会遇到需要给 sql 加条件的情况。 &#xff0…

Open3D KDtree的建立与使用

目录 一、概述 1.1kd树原理 1.2kd树搜索原理 1.3kd树构建示例 二、常见的领域搜索方式 2.1K近邻搜索&#xff08;K-Nearest Neighbors, KNN Search&#xff09; 2.2半径搜索&#xff08;Radius Search&#xff09; 2.3混合搜索&#xff08;Hybrid Search&#xff09; …

进程 VS 线程(javaEE篇)

&#x1f341; 个人主页&#xff1a;爱编程的Tom&#x1f4ab; 本篇博文收录专栏&#xff1a;JavaEE初阶&#x1f449; 目前其它专栏&#xff1a;c系列小游戏 c语言系列--万物的开始_ 等 &#x1f389; 欢迎 &#x1f44d;点赞✍评论⭐收藏&#x1f496;三连支…

shell脚本编程的练习

字符测试方法&#xff1a; 双目测试 比较两个字符串&#xff1a; &#xff1a;等于,等值比较 &#xff01;&#xff1a;不等 单目测试&#xff1a; -n $stringVar:字符串是否为空&#xff0c;不空为真&#xff0c;空则为假 -z $stringVar:字符串是否为空&#xff0c;空则为…

xxl-job集成SpringBoot

安装xxl-job客户端一般有很多方式&#xff0c;我这里给大家提供两种安装方式&#xff0c;包含里面的各项配置等等。 前期需要准备好MySQL数据库。复制SQL到数据库里面。 # # XXL-JOB v2.4.2-SNAPSHOT # Copyright (c) 2015-present, xuxueli.CREATE database if NOT EXISTS x…

终于找到了免费的C盘清理软件(极智C盘清理)

搜了很久&#xff0c;终于让我找到了一款 完全免费的C盘清理软件&#xff08;极智C盘清理&#xff09;。 点击前往官网免费使用极智C盘清理软件&#xff1a; C盘清理 用户好评 完全免费的极智C盘清理 用极智C盘清理清理了下系统的临时文件、缓存等无用数据文件&#xff0c;C盘终…

JavaDS —— 顺序表ArrayList

顺序表 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构&#xff0c;一般情况下采用数组存储。在数组上完成数据的增删查改。在物理和逻辑上都是连续的。 模拟实现 下面是我们要自己模拟实现的方法&#xff1a; 首先我们要创建一个顺序表&#xff0c;顺序表…

00 Debian字符界面如何支持中文

作者&#xff1a;网络傅老师 特别提示&#xff1a;未经作者允许&#xff0c;不得转载任何内容。违者必究&#xff01; Debian字符界面如何支持中文 《傅老师Debian知识库系列之00》——原创 前言 傅老师Debian知识库特点&#xff1a; 1、拆解Debian实用技能&#xff1b; 2、…