android 复制控件,Android长按复制文本功能[通俗易懂]

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

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

Jetbrains全系列IDE稳定放心使用

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

在开始之前先说一个我遇到的一个坑:

viewGroup中有一个这个属性android:descendantFocusability=”blocksDescendants”

这个属性有三个值:

beforeDescendants:viewgroup会优先其子类控件而获取到焦点

afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点

blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点

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

Editext

直接上代码

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()就是选中的内容

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

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

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

(0)
上一篇 2026年4月13日 下午1:46
下一篇 2026年4月13日 下午1:49


相关推荐

  • PyCharm安装配置及干净卸载

    PyCharm安装配置及干净卸载系统 Win10 版本 PyCharm 前言一 下载 1 官网下载 2 打开安装包二 PyCharm 卸载 1 软件卸载 2 删除环境变量 3 删除注册表 强烈不推荐 前言 PyCharm 是由 JetBrains 公司开发的一款功能强大的 Python 编辑器一 下载 1 官网下载 Jetbrains 官网 https www jetbrains com 官网下载 https www jetbrains com pycharm download section windows 选择合适的系统版本下载

    2026年3月27日
    2
  • 王者荣耀语音文件下载

    王者荣耀语音文件下载

    2021年9月18日
    164
  • 固定成本、可变成本、沉没成本、机会成本、边际成本

    固定成本、可变成本、沉没成本、机会成本、边际成本1 固定成本 vs 可变成本根据成本费用与产量的关系可将总成本费用分为 可变成本 固定成本 半可变 或半固定 成本 固定成本是指不随产品产量的变化的各项成本费用 可变成本是指随着产品产量的增减而成正比例变化的各项费用 有些成本费用属于半可变成本 如不能熄灭的工业炉的燃料费等 工资 营业费用和流动资金利息等也都可能既有可变因素 又有固定因素 必要时需将半可变 或半固定 成进一步分解为可

    2026年3月18日
    4
  • java中method方法_java修改字体大小

    java中method方法_java修改字体大小LocalDateaThousandDaysLater=hello.plusDays(1000);这个调用后hello会有什么变化?他会改为1000天之后的日期吗?事实上,并没有。plusDays()方法会生成一个新的LocalDate对象,然后将这个新对象赋值给aThousandDaysLater。原来的对象在堆中不会有任何改变。我们说的plusDays方法没有更改调用plusDays方法的

    2025年9月12日
    7
  • 用js来实现那些数据结构14(树02-AVL树)

    在使用二叉搜索树的时候会出现一个问题,就是树的一条分支会有很多层,而其他的分支却只有几层,就像下面这样:如果数据量够大,那么我们在某条边上进行增删改查的操作时,就会消耗大量的时间。我们花费精力去构

    2022年3月25日
    33
  • SQL Server中的聚集索引(clustered index) 和 非聚集索引 (non-clustered index)

    SQL Server中的聚集索引(clustered index) 和 非聚集索引 (non-clustered index)本文转载自http://blog.csdn.net/ak913/article/details/8026743面试时经常问到的问题:1.什么是聚合索引(clusteredindex)/什

    2022年8月4日
    13

发表回复

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

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