TextView长按复制实现方法小结

有这么一个需求,用户在浏览文本信息时希望长按信息就能弹出复制的选项方便保存或者在别的页面使用这些信息.类似的, 就像长按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
		 }

		 @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" .

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);

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

时间: 2025-01-11 23:56:24

TextView长按复制实现方法小结的相关文章

【转】TextView长按复制实现方法小结

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

[Android] TextView长按复制实现方法小结(转载)

这是别人写的,既然别人总结过了,那我就不花时间研究这个了,但往后会补充一些使用经验之类的 原文地址:http://blog.csdn.net/stzy00/article/details/41477813 本文地址:http://www.cnblogs.com/rossoneri/p/4432499.html 有这么一个需求,用户在浏览文本信息时希望长按信息就能弹出复制的选项方便保存或者在别的页面使用这些信息.类似的, 就像长按WebView或者EditText的内容就自动弹出复制选项. 这里面

TextView长按复制实现方法 3种方法实践总结

实现效果 使用ContextMenu (1)注册菜单 @Override public void onCreate(Bundle savedInstanceState) { mMoblieTextView = (TextView) findViewById(R.id.mobile_textview); //注册上下文菜单 registerForContextMenu(mMoblieTextView); } (2)onCreateContextMenu添加菜单 @Override public v

Android TextView实现长按复制文本功能的方法

上网查询Android开发实现长按复制文本功能的方法很多,有什么改写系统长按响应,有用EditView控件替换TextView的方法,还有自定义控件什么的,总之都比较麻烦,而且效果也不好. 其实现在新的Android开发只需要增加一行代码就可以实现这个功能,在布局文件的TextView控件属性中增加这么一句就行:android:textIsSelectable="true" 但查询资料说只有android sdk 11起才支持,v11以下则不行了.我测试了一下在Android4没问题,

在Linux下禁用IPv6的方法小结

在Linux下禁用IPv6的方法小结--http://www.jb51.net/LINUXjishu/335724.html 这篇文章主要介绍了在Linux下禁用IPv6的方法小结,禁用IPv6的操作还是考虑到目前和IPv4的兼容性问题,需要的朋友可以参考下 Pv6被认为是IPv4——互联网上的传统32位地址空间——的替代产品,它用来解决现有IPv4地址空间即将耗尽的问题.然而,由于已经有大量主机.设备用IPv4连接到了互联网上,所以想在一夜之间将它们全部切换到IPv6几乎是不可能的.许多IPv

asp.net(c#)网页跳转 方法小结

返回 打印 asp.net(c#)网页跳转七种方法小结_实用技巧_脚本之家 在asp.net下,经常需要页面的跳转,下面是具体的几种方法.跳转页面是大部编辑语言中都会有的,正面我们来分别介绍一下关于.net中response.redirect sever.execute server.transfer 三种页面跳转的方法 ①response.redirect 这个跳转页面的方法跳转的速度不快,因为它要走2个来回(2次 postback),但他可以跳 转到任何页面,没有站点页面限制(即可以由雅虎跳

Sql server2005 优化查询速度50个方法小结

Sql server2005 优化查询速度50个方法小结 Sql server2005优化查询速度51法查询速度慢的原因很多,常见如下几种,大家可以参考下. I/O吞吐量小,形成了瓶颈效应.  没有创建计算列导致查询不优化.  内存不足.  网络速度慢.  查询出的数据量过大(可以采用多次查询,其他的方法降低数据量).  锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷).  sp_lock,sp_who,活动的用户查看,原因是读写竞争资源.  返回了不必要的行和列.  查询语句不好,没有

Android中用TextView显示大量文字的方法

最近学习Android中,试着实现一个简单的显示新闻Demo的时候,遇到了一个问题:一条新闻的内容文字很多,放在TextView上面超出屏幕了,怎么破? 查了一下资料,找到了两种方法实现: 1. 只用TextView,用TextView自带的滚动条完成全部展示,在布局xml文件中,TextView的属性需要设置android:scrollbars和android:singleLine,如下: <TextView android:id="@+id/news_item_content_text

VIM使用方法小结

有人说:学习vim就像学弹钢琴一样,一旦学会,受益无穷. VIM可能是人类史上最好的文本编辑器,但是学习vim在开始时是痛苦的.我们无法一次性记住所有的使用方法,但至少要知道 有哪些功能,然后在能用快捷方法的时候尽量使用,就能熟练使用VIM了. 两种模式 vim的神奇之处就在于他不是打开之后就像记事本一样往里输入或者删除,他有两种模式. 1.Normal 模式:当我们使用vim命令打开一个文件时,就进入了Normal模式,在这种模式下,我们可以移动光标,删除,粘贴等操作. 2.插入模式:这就类似