博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【转】TextView长按复制实现方法小结
阅读量:6446 次
发布时间:2019-06-23

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

有这么一个需求,用户在浏览文本信息时希望长按信息就能弹出复制的选项方便保存或者在别的页面使用这些信息.类似的, 就像长按WebView或者EditText的内容就自动弹出复制选项.

这里面主要是2个特点:

1,用户只能浏览文本信息而不能编辑这些文本信息;

2,用户对着文本信息长时间点按可以弹出”复制” 选项实现复制;

网上有好多种方法可实现,也比较零散, 此处做个小结,希望有所帮助.

1,通过继承EditText,自定义TextView

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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 对象.它负责管理复制后粘贴的这件事.

1
2
3
ClipboardManager cmb = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
cmb.setText(content.trim()); 
//将内容放入粘贴管理器,在别的地方长按选择"粘贴"即可
cm.getText();
//获取粘贴信息

 3,使用setTextIsSelectable()方法

代码中直接对TextView使用setTextIsSelectable()方法,将TextView设置成可点按选择的即可.

1
2
TextView tv = 
new 
TextView(context);
tv.setTextIsSelectable(
true
);

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

转载请注明: » 

原文链接:http://www.androidchina.net/1258.html

转载于:https://www.cnblogs.com/ryq2014/p/5587375.html

你可能感兴趣的文章
建立Ftp站点
查看>>
NavigationController的使用
查看>>
多线程编程之Windows环境下创建新线程
查看>>
ASP.Net MVC的开发模式
查看>>
groupbox 下的datagridview的列标题字体修改混乱
查看>>
HDU-3092 Least common multiple---数论+分组背包
查看>>
CentOS 7使用systemctl如何补全服务名称
查看>>
Unity3D NGUI 给button按钮添加单间事件
查看>>
C# 使用各种API
查看>>
密码的校验.大小写字母,数字,特殊字符中的至少3种
查看>>
ios 不同sdk4.3 6.0版本号,关于方法的兼容性的通用方法
查看>>
Shell编程学习总结
查看>>
070、如何定制Calico 网络policy(2019-04-15 周一)
查看>>
构建之法阅读笔记02
查看>>
Webstorm常用快捷键备忘
查看>>
js滚动加载到底部
查看>>
关于mac远程链接window服务器以及实现共享文件
查看>>
Redis慢查询,redis-cli,redis-benchmark,info
查看>>
Virtualbox 虚拟机网络不通
查看>>
java概念基础笔记整理
查看>>