有这么一个需求,用户在浏览文本信息时希望长按信息就能弹出复制的选项方便保存或者在别的页面使用这些信息.类似的, 就像长按WebView或者EditText的内容就自动弹出复制选项. 这里面主要是2个特点: 1,用户只能浏览文本信息而不能编辑这些文本信息; 2,用户对着文本信息长时间点按可以弹出"复制" 选项实现复制; 网上有好多种方法可实现,也比较零散, 此处做个小结,希望有所帮助.

1,通过继承EditText,自定义TextView

public class NewTextView extends EditText {public NewTextView(Context context) {super(context);// TODO Auto-generated constructor stub}public NewTextView(Context context, AttributeSet attrs) {super(context, attrs);// TODO Auto-generated constructor stub}public NewTextView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);// TODO Auto-generated constructor stub}@Overrideprotected boolean getDefaultEditable() {//禁止EditText被编辑return false;}}

上面很关键的一个方法是getDefaultEditable(), return false;即禁止EditText被编辑,变成了不可编辑的EditText, 但同时具有EditText的长按复制功能. 更进一步的,如果查看EditText源码, 就发现源码中有一个方法 protected void onCreateContextMenu(ContextMenu menu)  

控制了EditText长按弹出的上下文菜单, 可以自定义这个方法且实现为空protected void onCreateContextMenu(ContextMenu menu){   }

然后在onTouchEvent事件中拦截处理自定义的点按事件, 弹出自定义的菜单.

原理如上, 更直白简单的方法是直接在xml中使用一个EditText, 并且将属性设置为 android:editable="false" .

2,使用OnLongClickListener

直接使用TextView, 然后在代码里给TextView添加OnLongClickListener事件,长按时弹出自定义 "复制" 菜单(比如结合 PopupWindow做弹出菜单). 点击"复制" 就去获取TextView的内容.

当然, 这里只是获取内容, 如何将内容放入粘贴管理器还需要一个ClipboardManager 对象.它负责管理复制后粘贴的这件事.

ClipboardManager cmb = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);cmb.setText(content.trim()); //将内容放入粘贴管理器,在别的地方长按选择"粘贴"即可cm.getText();//获取粘贴信息

3,使用setTextIsSelectable()方法

代码中直接对TextView使用setTextIsSelectable()方法,将TextView设置成可点按选择的即可.

TextView tv = new TextView(context);tv.setTextIsSelectable(true);

上面就是常见的长按文本信息弹出"复制"菜单的一些方法小结了,希望对大家有所帮助.

TextView长按复制实现方法小结相关推荐

  1. android 长按复制,TextView长按复制实现方法 3种方法实践总结

    TextView长按复制实现方法 3种方法实践总结 发布时间:2020-09-05 14:32:58 来源:51CTO 阅读:1003 作者:huangwenwenlili 实现效果 使用Contex ...

  2. textview长按复制_TextView长按复制的实现方法(总结)

    有这么一个需求,用户在浏览文本信息时希望长按信息就能弹出复制的选项方便保存或者在别的页面使用这些信息.类似的,就像长按WebView或者EditText的内容就自动弹出复制选项. 这里面主要是2个特点 ...

  3. android edittext长按复制,用EditText 实现 textView 长按复制效果,edittexttextview

    用EditText 实现 textView 长按复制效果,edittexttextview 首先 EditText 是集成 TextView 的 我们直接将?EditText 设置为不可编辑来实现 其 ...

  4. textview长按复制_android-TextView的长按复制

    引子 android很多app都支持文本的选中,复制.根据观察,主要分为两类: 1)自由复制(弹出框里面支持全选) 2)仅支持全选复制 今天工作中遇到了全选的需求,现总结出来,方便以后查阅. 自由复制 ...

  5. Android TextView长按复制实现,Android复制文本

    代码调用系统复制粘贴板 //获取剪贴板管理器:ClipboardManager cm = (ClipboardManager) getSystemService(Context.CLIPBOARD_S ...

  6. TextView实现长按复制

    前段时间因为项目需求实现TextView长按复制的功能,特意上百度差了一下有不少实现这个功能的方法,隔了好久也怕忘了,总结一下: 先推荐目前感觉最好用的方法: 在布局文件的TextView控件属性中增 ...

  7. 关于小程序如何长按复制长文本的方法(比较简单的一种)

    在我们开发小程序时,可能会遇到一些场景,需要你复制弹框中的链接到手机浏览器中访问. 方法如下: 1.首先需要一个view盒子,添加css属性word-break: break-all;这个是自动换行用 ...

  8. vsftpd使用方法小结、Linux安装JDK出现“NoClassDefFoundError: /Object”的解决方案、ubuntu 12.04安装jdk

    vsftpd使用方法小结 vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linux, BSD, Solaris,HP-UX 以及 IRIX 上面.它支持很多其他的 ...

  9. textview 复制粘贴_Android TextView使用剪贴板复制粘贴

    textview 复制粘贴 In this tutorial, we'll implement the copy-paste feature on a TextView in our Android ...

最新文章

  1. linux进程--exec详解(四)
  2. LeetCode Online Judge 题目C# 练习 - Minimum Path Sum
  3. 在linux系统下把多个终端合并在一个窗口
  4. IBM服务器系统盘更换后检查,IBM服务器更换rootvg故障磁盘操作指南
  5. 如何在SAP Business by design的UI上扩展新的按钮
  6. C++11 中的内联函数、auto关键字、for循环及空指针
  7. tidb load data file 失败_TIDB运维之数据导入与导出
  8. SQL Server 2008 数据库快照
  9. httpclient java 异步_Java的异步HttpClient
  10. (APIO2014)序列分割
  11. Integrating ASP.NET AJAX with SharePoint
  12. 计算机质保试题及答案,质量体系、国军标体系试卷(质保部出)
  13. Python制作经典的吃豆豆小游戏
  14. 教你如何安装小熊猫DEV-C++6.7.5版
  15. 关于SSD写放大问题
  16. 文字存入mysql数据库时出现Incorrect string value错误
  17. 载波观测值与载波观测方程
  18. win7 下anaconda 安装及安装包
  19. Angr 从入门到放弃(二)
  20. 使用matlab处理INCF采集数据,mdf(.dat)格式文件,并将将其写入excel文件

热门文章

  1. linux中execve函数的用法
  2. 什么是Socket?Socket协议的形象描述
  3. 按键脚本c语言,按键精灵脚本(示例代码)
  4. 最近公共祖先 (LCA) [No. 21]
  5. 烤仔建工×MetaEstate×MetaCat | 明天来元宇宙过感恩节!
  6. Win10 下使用Telnet命令,打开telnet功能
  7. 人工智能时代大数据分析面临的最大挑战!
  8. 尚硅谷以太坊区块链学习之NFT智能合约(6)
  9. Linux 强制破解root密码 是root密码哦
  10. warning: go env -w GO111MODULE=... does not override conflicting OS environment variable