【Android】Android长按复制文本功能[通俗易懂]

【Android】Android长按复制文本功能[通俗易懂]安卓一般能用到长按复制的控件Textview,Editext,可能也有WebView在开始之前先说一个我遇到的一个坑:viewGroup中有一个这个属性android:descendantFocusability=”blocksDescendants”这个属性有三个值:beforeDescendants:viewgroup会优先其子类控件而获取到焦点afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点blocksDescendants:vie

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

安卓一般能用到长按复制的控件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()就是选中的内容
然后就是把数据复制到剪贴板同上~

作者:Eternal_life
链接:https://www.jianshu.com/p/9dc0800eed5f
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/188111.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux添加路由网关_linux删除默认网关

    linux添加路由网关_linux删除默认网关1、以前经常使用route命令添加和删除路由添加网关/设置网关:routeadd-net192.100.10.0netmask255.255.255.0deveth0#增加一条到达192.100.10.0的路由。屏蔽一条路由:routeadd-net192.100.10.0netmask255.255.255.0reject#增加一…

    2022年10月5日
    3
  • UOS命令_uos手动安装教程

    UOS命令_uos手动安装教程其他Linux发行版中用习惯了ll命令,在UOS中居然木有提供,其实ll命令就是ls-alF命令的一个别名,加到.bashrc里面就行了$vim~/.bashrc#在文件末尾追加下面内容aliasll=’ls-alF’$source~/.bashrc$ll

    2025年11月18日
    5
  • pycharm导入模块出错_regsvr32模块加载失败

    pycharm导入模块出错_regsvr32模块加载失败Pycharm项目中,导入模块出现下列情况时,说明Appium-Python-Client没有安装解决方法:1、WIN键+R,输入CMD回车输入pipinstallAppium-Python-Client2、这个时候打开Pycharm,重新输入fromappiumimportwebdriver,仍旧没有成功。是因为你的项目没有添加这个库,还需要以下步骤搜索出Appium-Python-Client,点击添加回到刚才的页面,可以发现已经添加成功了,这时候点击ok即可模块也导

    2025年8月15日
    5
  • 模板阴影理论概述

    模板阴影理论概述尹克雄|2002年12月02日07:30|图形编程与理论阴影 体积 平面 模板 光 前身 图 深度 夹讨论使用模板阴影卷的几种方法,包括每种阴影卷的优点和缺点。介绍阴影以前只是一个变暗的纹理,通常是圆形的形状,它被投射到游戏中的字符或对象之下的地板上。一个人必须不知情或天真地认为,我们仍然可以在未来的3D游戏中摆脱这种粗暴的“

    2022年6月2日
    50
  • 使用group by,having,count函数查询表中某字段相同内容的数据

    使用group by,having,count函数查询表中某字段相同内容的数据

    2021年7月17日
    73
  • flowable入门

    flowable入门在使用flowable框架的时候,首先需要引入flowable的jar包,flowablemaven仓库地址为:  org.flowable  flowable-engine  6.0.0.RC1新建flowable.cfg.xml文件,如下图所示:flowable.cfg.xml文件内容如下所示:

    2022年5月21日
    43

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号