【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
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 用Erlang实现Time Wheel

    用Erlang实现Time Wheel

  • matlab 插值出错,MATLAB插值问题

    matlab 插值出错,MATLAB插值问题一、一元函数插值已知函数y=f(x)在区间[a,b]上的n+1个不同点的函数值为,若存在一个简单函数F(x),使,称F(x)为f(x)在区间[a,b]上的插值函数,称(xi,yi)为插值节点。若F(x)为多项式,称为多项式插值(或代数插值);常用的代数插值方法有:拉格朗日插值,牛顿插值。n次代数插值:已知f(x)在n+1个点x0,x1,…,xn处的函数值为y0,y1,…,yn,求一个n…

  • 最全的ASP.NET开源CMS汇总[通俗易懂]

    最全的ASP.NET开源CMS汇总[通俗易懂]这里汇总了一些asp.net开源cms,希望对学习ASP.NET的人员带来帮助.  国内:1.SiteServerCMSSiteServerCMS网站内容管理系统(著作权登记号2008SR15710)是定位于中高端市场的CMS内容管理系统,能最近汇总了一些asp.net开源cms,希望对学习ASP.NET的人员带来帮助:  国内CMS:  1.SiteServerCMS

  • 临界区 互斥量 事件 信号量_互斥信号量与同步信号量

    临界区 互斥量 事件 信号量_互斥信号量与同步信号量四种进程或线程同步互斥的控制方法:1、临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。2、互斥量:为协调共同对一个共享资源的单独访问而设计的。3、信号量:为控制一个具有有限数量用户资源而设计。4、事 件:用来通知线程有一些事件已发生,从而启动后继任务的开始。临界区(Critical Section)保证在某一时刻只有一个线程能访问数据的简便办法。在任意…

  • opencv保存图片小bug

    opencv保存图片小bug错误:cv2.error:OpenCV(4.4.0)C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-6sxsq0tp\opencv\modules\imgcodecs\src\loadsave.cpp:667:error:(-2:Unspecifiederror)couldnotfindawriterforthespecifiedextensioninfunction’cv::imwrite_’图片路径不对,

  • psutil 3.0

    psutil 3.0Hereweare.It’sbeenalongtimesincemylastblogpostandmylastpsutilrelease.Thereason?I’vebeentravelling!Imean…alot.I’vespent3monthsinBerlin,3weeksinJapanand2monthsin…

发表回复

您的电子邮箱地址不会被公开。

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