TextView长按复制的实现方法(总结)

时间:2021-05-20

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

这里面主要是2个特点:

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

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

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

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

publicclassNewTextViewextendsEditText{ publicNewTextView(Contextcontext){ super(context); //TODOAuto-generatedconstructorstub } publicNewTextView(Contextcontext,AttributeSetattrs){ super(context,attrs); //TODOAuto-generatedconstructorstub } publicNewTextView(Contextcontext,AttributeSetattrs,intdefStyle){ super(context,attrs,defStyle); //TODOAuto-generatedconstructorstub } @OverrideprotectedbooleangetDefaultEditable(){//禁止EditText被编辑 returnfalse; } }

上面很关键的一个方法是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 对象。它负责管理复制后粘贴的这件事。

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

3、使用setTextIsSelectable()方法

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

TextViewtv=newTextView(context); tv.setTextIsSelectable(true);

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

以上这篇TextView长按复制的实现方法(总结)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章