新网创想网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
利用TextView怎么实现一个长按复制功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
创新互联公司主要从事成都做网站、成都网站制作、网页设计、企业做网站、公司建网站等业务。立足成都服务江海,十多年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:13518219792
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怎么实现一个长按复制功能问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注创新互联行业资讯频道了解更多相关知识。