Android TextView长按复制的实现方法

 

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

1、在xml直接添加属性 

 android:textIsSelectable="true"

这样直接实现自带效果

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” .

 

3、使用OnLongClickListener

直接使用TextView,然后在代码里给TextView添加OnLongClickListener事件,长按时弹出自定义 “复制” 菜单(比如结合 PopupWindow做弹出菜单)。点击”复制” 就去获取TextView的内容。

当然, 这里只是获取内容,如何将内容放入粘贴管理器还需要一个ClipboardManager 对象。它负责管理复制后粘贴的这件事。

ClipboardManager cmb = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); 

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

  4、使用setTextIsSelectable()方法

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

TextView tv = new TextView(context); 

tv.setTextIsSelectable(true);

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

申小东001

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值