textview长按复制_android 长按复制文本和坑,以及ClipboardManager 剪贴板的简单使用...

本文介绍了在Android中如何实现TextView长按复制文本功能,通过设置`android:textIsSelectable="true"`可触发系统复制/粘贴功能。但部分机型如红米Note4X MIUI8.5上可能出现问题,解决方法是设置TextView宽度为MatchParent。此外,避免使用`android:descendantFocusability="blocksDescendants"`。为确保兼容性,建议自定义长按监听器使用ClipboardManager进行复制操作。示例代码展示了ClipboardManager的复制、粘贴及监听功能。
摘要由CSDN通过智能技术生成

如果要实现长按复制文本,那么android是可以支持的,只要将textview的android:textIsSelectable="true"就可以。 Edittext继承textview,因此,,,

查看TextView的API,里面就有这么一段介绍:

To allow users to copy some or all of the TextView's value and paste it somewhere else, set the XML attributeandroid:textIsSelectableto "true" or callsetTextIsSelectable(true). The textIsSelectable flag allows users to make selection gestures in the TextView, which in turn triggers the system's built-in copy/paste controls.

意思就是使用textIsSelectable属性就可以触发系统内置的复制/粘贴功能。

坑:

但是部分机型涉及到列表和Textview结合的时候,如ListLView内的Textview,RecyclerView中的Textview等,在部分机型上面会无法弹出应有的pop。 如红米note4X 的MIUI8.5,解决方式是将Textview的android:layout_width设为 MatchParent。

也有其他需要注意的地方,如viewGroup使用 afterDescendants,不能设置android:descendantFocusability=”blocksDescendants”

beforeDescendants:viewgroup会优先其子类控件而获取到焦点

afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点

blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点。

但是考虑到不同rom可能不同,建议自己实现复制功能,如下

tvView.setOnLongClickListener(new OnLongClickListener() {

@Override

public boolean onLongClick(View v) {

ClipboardManager cm =(ClipboardManager)getContext().getSystemService(Context.CLIPBOARD_SERVICE);

cm.setText(orderDetailsTvOrderNumber.getText().toString());

return false;

}

});

ClipboardManager简单实用如下:

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

复制:

创建一个剪贴数据集,包含一个普通文本数据条目(需要复制的数据)

ClipData clipData = ClipData.newPlainText(null,"文本数据");

把数据集设置(复制)到剪贴板

clipboard.setPrimaryClip(clipData);

粘贴:

获取剪贴板的剪贴数据集

ClipData clipData = clipboard.getPrimaryClip();

if (clipData != null && clipData.getItemCount() > 0) {

CharSequence text = clipData.getItemAt(0).getText();//  从数据集中获取(已复制)第一条文本数据

System.out.println("Clip text is : " + text);

}

监听:

添加剪贴板数据改变监听器

clipboard.addPrimaryClipChangedListener(new ClipboardManager.OnPrimaryClipChangedListener() {

@Override    public void onPrimaryClipChanged() {

// 剪贴板中的数据被改变,此方法将被回调

}

});

移除指定的剪贴板数据改变监听器

clipboard.removePrimaryClipChangedListener(listener);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值