博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Android] TextView长按复制实现方法小结(转载)
阅读量:5863 次
发布时间:2019-06-19

本文共 1939 字,大约阅读时间需要 6 分钟。

这是别人写的,既然别人总结过了,那我就不花时间研究这个了,但往后会补充一些使用经验之类的

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

 本文转载自SharkBin博客园博客,原文链接:http://www.cnblogs.com/SharkBin/p/6525344.html如需转载自行联系原作者

你可能感兴趣的文章
华为2016编程题
查看>>
APMServ 5.2.6.Apache启动失败,请检查相关配置。2.MySQL5.1启动失败的解决方法
查看>>
extJs学习基础4 Ext.each的用法
查看>>
Linux分区
查看>>
(转)IntelliJ IDEA java项目导入jar包,打jar包
查看>>
软件质量与测试--第六周作业 软件测试和评估
查看>>
实验4 颜色、字符串资源的使用
查看>>
Windows7配置python环境变量
查看>>
POJ 1654 Area 多边形面积 G++会WA
查看>>
apt 和 apt-get的区别
查看>>
学习园地
查看>>
Keras网络层之卷积层
查看>>
VS2017 调试不能命中断点问题
查看>>
7. Python运算符之逻辑、成员、身份运算符及优先级
查看>>
VirtualBox虚拟机网络设置(四种方式)
查看>>
通过构造器配置Bean
查看>>
thinkphp杂项功能(主干)
查看>>
jsp实现翻页功能
查看>>
PHP 比 Java 的开发效率高在哪?
查看>>
P1144 最短路计数
查看>>