美文网首页Android
android 长按复制文本和坑,以及ClipboardMana

android 长按复制文本和坑,以及ClipboardMana

作者: goldenfire | 来源:发表于2018-02-28 16:05 被阅读786次

    如果要实现长按复制文本,那么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);

    相关文章

      网友评论

        本文标题:android 长按复制文本和坑,以及ClipboardMana

        本文链接:https://www.haomeiwen.com/subject/mffixftx.html