[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学习笔记_week15
note 上节作业问题: 1.css重用 <style> 如果整个页面的宽度 > 900px时: { .c{ 共有 } .c1{ 独有 } } .c2{ 独有 } </styl ...
- 利用java反射排查一次线上问题(确定问题及问题定位)
背景 hive 用的 1.1.0版本(其实这个版本bug挺多,包括执行计划串列的等等问题吧,建议大家如果选1.x版本用1.2.2吧),一下提到的代码部分如无特殊说明都是hive-1.1.0版本. 前段 ...
- CentOS6.9 网络设置
一.临时设置IP地址 ifconfig eth0 192.168.42.119 broadcast 192.168.42.129 netmask 255.255.255.0 二.上述方法只能临时生效, ...
- twisted的installReactor()函数
#twisted的安装反应堆函数def installReactor(reactor): """ Install reactor C{reactor}. @param r ...
- ssm学习的第一个demo---crm(3)
(1)写查询客户的sql语句 疑问很多,第一个是第五行的后面属性为什么不能加c.: 别名 第二个是对左连接不太明白: 第三个下面的条件,第一个是(马)就够了,为什么还要下面三个(对应的jsp页面 ...
- ubuntu防火墙命令初探
1.防火墙的状态与开关 1)$sudo ufw status //查看防火墙的状态及当前的设置规则 2)$sudo ufw enable //开启防火墙 3)$sudo ufw disable // ...
- day42-多线程与多进程
一 进程与线程的概念 1.1 进程 考虑一个场景:浏览器,网易云音乐以及notepad++ 三个软件只能顺序执行是怎样一种场景呢?假如有两个程序A和B,程序A在执行到一半的过程中,需要读取大量的数据输 ...
- ajax之发送post请求
jquery发送post请求 function AjaxSubmit3() { //jquery发送post请求 $.ajax({ url: '/app04/ajax1/', type: 'POST' ...
- ORM查询api
下面的方法都是对查询的结果进行出理:比如objects.filter.values()... 1)values(*field):返回一个可迭代的字典序列<QuerySet: [{name='小王 ...
- input点击后的 默认边框去除
转自 http://blog.sina.com.cn/s/blog_9f1cb4670102v47g.html css文件里加句话:*:focus { outline: none; } 或 input ...