美文网首页Android轮子
Android长按复制文本功能

Android长按复制文本功能

作者: Eternal_life | 来源:发表于2020-04-17 17:02 被阅读0次

    安卓一般能用到长按复制的控件Textview,Editext,可能也有WebView

    在开始之前先说一个我遇到的一个坑:
    viewGroup中有一个这个属性android:descendantFocusability=”blocksDescendants”
    这个属性有三个值:

      beforeDescendants:viewgroup会优先其子类控件而获取到焦点
    
      afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点
    
      blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点
    

    在这里我们要用afterDescendants就好了。

    Editext

    直接上代码

       <EditText
                android:id="@+id/order_details_tv_order_number"
                style="@style/theme_loginEditText"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="2"
                android:background="@null"//背景设为null,去掉editText下划线
                android:editable="false"//不可编辑
                android:textIsSelectable="true"//文字内容可选
                android:gravity="right|center_vertical"
                android:lines="1"
                android:textColor="@color/pub_color_black"
                android:textCursorDrawable="@null"//游标设为null,去掉游标
                android:textSize="@dimen/text_h16"
                tools:text="2382787482347" />
    

    如果遇到不能弹出系统复制的功能,加上以下代码绝对能复制成功

      ClipboardManager cm =(ClipboardManager)getContext().getSystemService(Context.CLIPBOARD_SERVICE);
      cm.setText(orderDetailsTvOrderNumber.getText().toString());
     //ToastUtil.toastSth(getContext() , "文本已复制,快去粘贴吧~");
    

    Textview

    其实单单考虑长按复制,那就只需要获取到文本内容然后复制到粘贴板上,上代码:

    ClipboardManager clipboard = (ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);
    ClipData clipData = ClipData.newPlainText(null,text);// 把数据复制到剪贴板
    clipboard.setPrimaryClip(clipData);
    

    或者在布局中加上textIsSelectable这个属性:

    android:textIsSelectable="true"
    

    Webview

    webview在加载链接之前想长按复制链接,其实原理也还是现获取webview要加载的内容然后把它复制到剪贴板

    获取选中的内容要调用webView中的未公开函数getSelection 因此通过反射:
    Method m = WebView.class.getMethod("getSelection", null);
    m.setAccessible(true);
    Object obj = m.invoke(webview, null);
    obj.toString()就是选中的内容
    

    然后就是把数据复制到剪贴板同上~

    相关文章

      网友评论

        本文标题:Android长按复制文本功能

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