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

所属分类: 软件编程 / Android 阅读数: 1548
收藏 0 赞 0 分享

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

这里面主要是2个特点:

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

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

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

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长按复制的实现方法(总结)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

更多精彩内容其他人还在看

android读取短信示例分享

复制代码 代码如下:package com.homer.sms; import java.sql.Date;import java.text.SimpleDateFormat; import android.app.Activity;import android.databa... 查看详情
收藏 0 赞 0 分享

android使用videoview播放视频

复制代码 代码如下:public class Activity01 extends Activity{ /** Called when the activity is first created. */ @Override public void o... 查看详情
收藏 0 赞 0 分享

Android图片占用内存全面分析

曾经有一个朋友问过我一个问题, 一张512*512  150KB PNG格式图片和一张512*512 100KB 压缩比是8的JPG格式的图片,加载到内存中,也就是加载到一个Bitmap中,哪个占用的内存大? 这个问题似乎有点难回答,测试一下就知道了. 好了,按照要求... 查看详情
收藏 0 赞 0 分享

android通过jxl读excel存入sqlite3数据库

复制代码 代码如下:package com.demo.day20140228; import java.io.File;import java.sql.Connection;import java.sql.DriverManager;import java.sql.Prepar... 查看详情
收藏 0 赞 0 分享

android实现通知栏下载更新app示例

1.设计思路,使用VersionCode定义为版本升级参数。android为我们定义版本提供了2个属性:复制代码 代码如下:<manifest package="com.cnblogs.tianxia.subway"android:versionCode="1" <!... 查看详情
收藏 0 赞 0 分享

android异步请求服务器数据示例

1、在android4.0以后的版本,主线程(UI线程)不在支持网络请求,原因大概是影响主线程,速度太慢,容易卡机,所以需要开启新的线程请求数据; 复制代码 代码如下:thread1 = new Thread(){@Overridepublic void run() {&nbs... 查看详情
收藏 0 赞 0 分享

android自定义toast(widget开发)示例

1、Toast控件: 通过查看源代码,发现Toast里面实现的原理是通过服务Context.LAYOUT_INFLATER_SERVICE获取一个LayoutInflater布局管理器,从而获取一个View对象(TextView),设置内容将其显示 复制代码 代码如下:pub... 查看详情
收藏 0 赞 0 分享

android自定义窗口标题示例分享

1、建好项目之后在它的layout文件夹下创建一个title.xml文件,作为自定义窗口标题的文件。 复制代码 代码如下:<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="ht... 查看详情
收藏 0 赞 0 分享

android实现widget时钟示例分享

一、在 AndroidManifest.xml文件中配置Widgets: 复制代码 代码如下:<manifest xmlns:android="http://schemas.android.com/apk/res/android"    pa... 查看详情
收藏 0 赞 0 分享

android动态加载布局文件示例

一、布局文件part.xml: 复制代码 代码如下:<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http... 查看详情
收藏 0 赞 0 分享
查看更多