有这么一个需求,用户在浏览文本信息时希望长按信息就能弹出复制的选项方便保存或者在别的页面使用这些信息。类似的,就像长按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);
上面就是常见的长按文本信息弹出”复制”菜单的一些方法小结了,希望对大家有所帮助.
以上这篇TextView长按复制的实现方法(总结)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持小牛知识库。
本文向大家介绍Android textview 实现长按自由选择复制功能的方法,包括了Android textview 实现长按自由选择复制功能的方法的使用技巧和注意事项,需要的朋友参考一下 这里有一个大坑,我的viewGroup中有一个这个属性android:descendantFocusability=”blocksDescendants” 开始没有注意到,试了好多方法都不行,后来才看到这个属
本文向大家介绍C#复制和深度复制的实现方法,包括了C#复制和深度复制的实现方法的使用技巧和注意事项,需要的朋友参考一下 深度复制与浅表复制的区别在于,浅表复制只复制值类型的值,而对于实例所包含的对象依然指向原有实例。 运行结果: 一、List<T>对象中的T是值类型的情况(int 类型等) 对于值类型的List直接用以下方法就可以复制: 二、List<T>对象中的T是引用类型的情况(例如自定义的实
本文向大家介绍Android实现TextView两端对齐的方法,包括了Android实现TextView两端对齐的方法的使用技巧和注意事项,需要的朋友参考一下 Android中的TextView控件默认是做不到两端对齐的,都是左对齐。可能的原因是安卓默认数字、字母不能为第一行以后每行的开头字符,因为数字、字母为半角字符,还有就是文字中的英文字符占用1个字节,而一个汉字占用两个字节。下面我就介绍下实
本文向大家介绍html5+CSS 实现禁止IOS长按复制粘贴功能,包括了html5+CSS 实现禁止IOS长按复制粘贴功能的使用技巧和注意事项,需要的朋友参考一下 因为在移动端APP需要实现长按执行别的事件,但是在iOS系统有默认的长按选择复制粘贴,禁止此功能在网上找了很多资料,最终整理出目前最好的解决方法。 项目是APP,已经经过多款手机适配此时,因此可以放心使用。 以上所述是小编给大家介绍的h
本文向大家介绍python中实现定制类的特殊方法总结,包括了python中实现定制类的特殊方法总结的使用技巧和注意事项,需要的朋友参考一下 看到类似__slots__这种形如__xxx__的变量或者函数名就要注意,这些在Python中是有特殊用途的。 __slots__我们已经知道怎么用了,__len__()方法我们也知道是为了能让class作用于len()函数。 除此之外,Python的clas
本文向大家介绍IOS初始化控制器的实现方法总结,包括了IOS初始化控制器的实现方法总结的使用技巧和注意事项,需要的朋友参考一下 IOS初始化控制器的实现方法总结 一.ViewControllViewController方法 二 .ViewControllViewController 与 xib方法 如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!