[Android] TextView长按复制实现方法小结(转载)
这是别人写的,既然别人总结过了,那我就不花时间研究这个了,但往后会补充一些使用经验之类的
原文地址:http://blog.csdn.net/stzy00/article/details/41477813
本文地址:http://www.cnblogs.com/rossoneri/p/4432499.html
有这么一个需求,用户在浏览文本信息时希望长按信息就能弹出复制的选项方便保存或者在别的页面使用这些信息.类似的, 就像长按WebView或者EditText的内容就自动弹出复制选项. 这里面主要是2个特点: 1,用户只能浏览文本信息而不能编辑这些文本信息; 2,用户对着文本信息长时间点按可以弹出"复制" 选项实现复制; 网上有好多种方法可实现,也比较零散, 此处做个小结,希望有所帮助.
通过继承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
}
@Override
protected 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" .
使用OnLongClickListener
直接使用TextView, 然后在代码里给TextView添加OnLongClickListener事件,长按时弹出自定义 "复制" 菜单(比如结合 PopupWindow做弹出菜单). 点击"复制" 就去获取TextView的内容.
当然, 这里只是获取内容, 如何将内容放入粘贴管理器还需要一个ClipboardManager 对象.它负责管理复制后粘贴的这件事.
ClipboardManager cmb = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
cmb.setText(content.trim()); //将内容放入粘贴管理器,在别的地方长按选择"粘贴"即可
cm.getText();//获取粘贴信息
使用setTextIsSelectable()方法
代码中直接对TextView使用setTextIsSelectable()方法,将TextView设置成可点按选择的即可.
TextView tv = new TextView(context);
tv.setTextIsSelectable(true);
[Android] TextView长按复制实现方法小结(转载)的更多相关文章
- 【转】TextView长按复制实现方法小结
有这么一个需求,用户在浏览文本信息时希望长按信息就能弹出复制的选项方便保存或者在别的页面使用这些信息.类似的, 就像长按WebView或者EditText的内容就自动弹出复制选项. 这里面主要是2个特 ...
- Android开机启动Activity或者Service方法(转载)
这段时间在做Android的基础开发,现在有一需求是开机启动,按照网上某些博文教程做了下,始终不成功,一开机总是提示所启动的应用程序意外终止,于是参考了Android SDK doc,终于解决问题,下 ...
- Android—— TextView文字链接4中方法
转自:http://ghostfromheaven.iteye.com/blog/752181 Android 的实现TextView中文字链接的方式有很多种. 总结起来大概有4种: 1.当文字中出现 ...
- ios textfield / textview长按复制粘贴中文显示
当我们在写应用时要复制粘贴文本框内容时,默认显示的文字为英文字体,可按如下步骤设置,显示中文:
- Android TextView中 字体加粗方法
textView.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));//加粗 textView.getPaint().setFakeBoldT ...
- ASP.NET对路径"C:/......."的访问被拒绝 解决方法小结 [转载]
问题: 异常详细信息: System.UnauthorizedAccessException: 对路径“C:/Supermarket/output.pdf”的访问被拒绝. 解决方法: 一.在IIS中的 ...
- Android中用TextView显示大量文字的方法
最近学习Android中,试着实现一个简单的显示新闻Demo的时候,遇到了一个问题:一条新闻的内容文字很多,放在TextView上面超出屏幕了,怎么破? 查了一下资料,找到了两种方法实现: 1. 只用 ...
- android TextView多行文本(超过3行)使用ellipsize属性无效问题的解决方法
这篇文章介绍了android TextView多行文本(超过3行)使用ellipsize属性无效问题的解决方法,有需要的朋友可以参考一下 布局文件中的TextView属性 复制代码代码如下: < ...
- Android TextView内容过长加省略号,点击显示全部内容
在Android TextView中有个内容过长加省略号的属性,即ellipsize,用法如下: 在xml中:android:ellipsize="end" 省略号在结尾an ...
随机推荐
- python学习笔记_week8
一.Socket 当服务端传的东西大于客户端的最大值时怎么办?①改大buffer不行(有上限)②多传几次(用for循环必须要知道循环几次,所以不用for循环,用while) 服务端: import o ...
- linux 下使用 curl post
命令: curl -X POST -d @/etc/lazada/lazada_tracking.txt http://localhost:8080/booking/rs/LazadaServic ...
- offsetof使用小结
先上例子 #include <stdio.h> #include <stdlib.h> /* offsetof example */ #include <stddef.h ...
- delphi 调用 c++builder
delphi 调用 c++builder c++builder 调用delphi 混合调用,mix https://community.embarcadero.com/blogs/entry/mixi ...
- Crontab 删除N天前日志
linux是一个很能自动产生文件的系统,日志.邮件.备份等.虽然现在硬盘廉价,我们可以有很多硬盘空间供这些文件浪费,让系统定时清理一些不需要的文件很有一种爽快的事情.不用你去每天惦记着是否需要清理日志 ...
- struts2中的constant介绍之struts.objectFactory与spring的整合
struts2提供给我们更为灵活的设计,他的很多东西都是可以手动配置的,下面介绍下他的一些 常用的constant作用和配置 struts.objectFactory这个属性用于说明Struts2的 ...
- Java继承与多态浅析
一.继承 1.通过extends继承的父类可以是不加abstract关键字的普通类,也可以是加了abstract关键字的抽象类.继承普通类时可以覆写父类的方法,或者创建自己独有的方法,或者这两 ...
- 使用karma做多浏览器的UI测试
avalon1.6开发得差不多,这次使用先进的开发理念进行开发,比如模块化,单元测试什么... ui测试是重要的一环,之前用阿里的totoro,但打开浏览器不方便.于是从webdrieverio, n ...
- LeetCode OJ 215. Kth Largest Element in an Array
Find the kth largest element in an unsorted array. Note that it is the kth largest element in the so ...
- 20.pipe
pipe相当于angular1里面的filter 做一些格式转换啊,或者从一个数组里面选取一个元素等等 只要你愿意可以定义很复杂的内容‘’ 我们先看看 angular2 里面自带的一些pipe 我们去 ...