开发者社区> eddie小英俊> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

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


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Android NDK开发系列教程3:基本方法调用及传参(续)
终于建了一个自己个人小站:https://huangtianyu.gitee.io,以后优先更新小站博客,欢迎进站,O(∩_∩)O~~ 上一节主要讲解Java向native传参,下面主要讲解从native传相应的数据到java层。
1132 0
【Android 应用开发】Android开发技巧--Application, ListView排列,格式化浮点数,string.xml占位符,动态引用图片
【Android 应用开发】Android开发技巧--Application, ListView排列,格式化浮点数,string.xml占位符,动态引用图片
154 0
Android大数据、断点续传、耗时下载之DownloadManager开发简介(1)
 Android大数据、断点续传、耗时下载之DownloadManager开发简介(1) Android涉及到的网络数据请求,如果是零星数据、且数据量较小(几十KB到几百KB,1MB以内),一般的,可以自己使用Android原生HTTP或者第三方开源框架如Volley(相关文章:http://blog.
933 0
Android开发重要参考资料
=======================博客============================= 秋百万 有心课堂 郭霖 源码 安装ffmpeg 胡凯 官方培训课程 litesuitsway 爱哥 trinea robinRobin Hu...
850 0
文章
问答
文章排行榜
最热
最新
相关电子书
更多
Android组件化实现
立即下载
Android应用启动速度和内存优化实践
立即下载
Android插件化:从入门到放弃
立即下载