Android实现长按复制文本功能
android:descendantFocusability=”blocksDescendants”这个属性有三个值:
beforeDescendants:viewgroup会优先其子类控件而获取到焦点afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点
在这里我们要用afterDescendants就好了。
Editext:
直接上代码:
<EditTextandroid: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);
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()就是选中的内容
然后就是把数据复制到剪贴板同上~
评论
