textview长按复制_android-TextView的长按复制[通俗易懂]

textview长按复制_android-TextView的长按复制[通俗易懂]引子android很多app都支持文本的选中,复制。根据观察,主要分为两类:1)自由复制(弹出框里面支持全选)2)仅支持全选复制今天工作中遇到了全选的需求,现总结出来,方便以后查阅.自由复制这种方式很简单,只需要两行代码,(下面的红色)android:layout_height=”wrap_content”android:text=”长按自由复制”android:textColorHighligh…

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

Jetbrains全系列IDE稳定放心使用

引子

android很多app都支持文本的选中,复制。根据观察,主要分为两类:

1)自由复制(弹出框里面支持全选)

2)仅支持全选复制

今天工作中遇到了全选的需求,现总结出来,方便以后查阅.

自由复制

这种方式很简单,只需要两行代码,(下面的红色)

android:layout_height=”wrap_content”

android:text=”长按自由复制”android:textColorHighlight=”#CCCCCC”android:textIsSelectable=”true” />

运行起来;

长按这个TextView,就会出现系统自带的弹出框。

如图:

textview长按复制_android-TextView的长按复制[通俗易懂]

自定义dialog全选复制

针对这个功能,我写了一个工具类,现在贴出主要代码:

3个java类:

packagecom.example.longpresscopy;importandroid.os.Bundle;importandroid.support.v7.app.AppCompatActivity;importandroid.view.Window;importandroid.view.WindowManager;importandroid.widget.TextView;public class MainActivity extendsAppCompatActivity {privateTextView tv_test, tv_test2;

@Overrideprotected voidonCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);

requestWindowFeature(Window.FEATURE_NO_TITLE);//隐藏标题

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,

WindowManager.LayoutParams.FLAG_FULLSCREEN);//设置全屏

setContentView(R.layout.activity_main);

tv_test=findViewById(R.id.tv_test);

tv_test2=findViewById(R.id.tv_test2);new CopyShowerUtil(this, tv_test);new CopyShowerUtil(this, tv_test2);

}

}

importandroid.app.Dialog;importandroid.content.Context;importandroid.graphics.Rect;importandroid.support.annotation.NonNull;importandroid.view.Gravity;importandroid.view.View;importandroid.view.Window;importandroid.view.WindowManager;importcom.gwtsz.gts2.hx.R;/*** 生成一个始终跟随 参数控件的窗口*/

public class CopyDialog extendsDialog {publicCopyDialog(@NonNull Context context, View layout, View tv_relative) {super(context, R.style.copyDialog);

setContentView(layout);

Window window=getWindow();

WindowManager.LayoutParams params=window.getAttributes();

params.gravity= Gravity.TOP | Gravity.LEFT;//dialog的初始位置为左上角

Rect r= newRect();

tv_relative.getGlobalVisibleRect(r);

params.x= r.left + (r.right – r.left) / 2;//X轴上平移,直到X轴的值,在tv_relative的中心线

params.y = r.top + (r.bottom – r.top) / 2;

window.setAttributes(params);

}

}

importandroid.annotation.SuppressLint;importandroid.content.ClipData;importandroid.content.ClipboardManager;importandroid.content.Context;importandroid.content.DialogInterface;importandroid.graphics.Color;importandroid.view.LayoutInflater;importandroid.view.View;importandroid.widget.TextView;public classCopyShowerUtil {privateContext mContext;privateTextView tv_test;private int originalColor = 0xFFFFFFFF;private int highLightColor = 0xFFCCCCCC;public void setOriginalColor(intoriginalColor) {this.originalColor =originalColor;

}public void setHighLightColor(inthighLightColor) {this.highLightColor =highLightColor;

}/*** 执行

*

*@paramcontext

*@paramtv_test_T*/

publicCopyShowerUtil(Context context, TextView tv_test_T) {

mContext=context;

tv_test=tv_test_T;

tv_test.setOnLongClickListener(newView.OnLongClickListener() {

@Overridepublic booleanonLongClick(View v) {

gotoCopyState();return false;

}

});

}private boolean ifCopyState = false;private voidgotoCopyState() {if (!ifCopyState) {

tv_test.setBackgroundColor(highLightColor);

View layout= LayoutInflater.from(mContext).inflate(R.layout.tv_corner_copy, null);final CopyDialog copyDialog = newCopyDialog(mContext, layout, tv_test);

layout.setOnClickListener(newView.OnClickListener() {

@SuppressLint(“NewApi”)

@Overridepublic voidonClick(View v) {

ClipboardManager manager=(ClipboardManager) mContext.getSystemService(Context.CLIPBOARD_SERVICE);

manager.setPrimaryClip(ClipData.newHtmlText(null, tv_test.getText().toString(), null));

copyDialog.dismiss();

copyDialog.cancel();

}

});

copyDialog.setOnCancelListener(newDialogInterface.OnCancelListener() {

@Overridepublic voidonCancel(DialogInterface dialog) {

leaveCopyState();

}

});

copyDialog.show();

ifCopyState= true;

}

}private voidleaveCopyState() {if(ifCopyState) {

tv_test.setBackgroundColor(originalColor);

ifCopyState= false;

}

}

}

layout目录里的布局文件:

activity_main.xml

tv_corner_copy.xml

drawable目录里面的sharp.xml文件

要加入到styles.xml里面的 dialog风格

@null

true

false

true

@color/transparent

false

以及color

#FFFFFF

最终效果

可以点复制,然后在下面的EditText里面粘贴。

textview长按复制_android-TextView的长按复制[通俗易懂]

弹出框会始终跟随要复制的内容。

textview长按复制_android-TextView的长按复制[通俗易懂]

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

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

(0)
上一篇 2026年4月18日 下午2:37
下一篇 2026年4月18日 下午2:43


相关推荐

  • 软件开发与软件研发的区别「建议收藏」

    软件开发与软件研发的区别「建议收藏」按:这几天我一直在写这篇东西,本来是胸有成竹,没想到后来越写越发现自己在这个题目下有太多话想说,而以我现在的能力又不能很好地概括总结,以至于越写越长,文章结构也变得混乱,到后来修改的时候每次都要考虑好久才能下笔,所以决定拆成两部分来发,以便阅读。这篇写得我心力交瘁,质量不算好,凑合着看吧。同样是写程序,不同的岗位工作内容不一样,对程序质量以及工程师的要求也不一样。程序开发大概可以划分成两类…

    2022年7月16日
    29
  • OpenCV调用海康威视等摄像头(处理rtsp视频流)方法以及,出现内存溢出(error while decoding)或者高延迟问题解决[通俗易懂]

    OpenCV调用海康威视等摄像头(处理rtsp视频流)方法以及,出现内存溢出(error while decoding)或者高延迟问题解决[通俗易懂]摄像头与电脑的连接首先,你需要获得hikvision摄像头的密码以及用户名(不知道的可以去打客服电话进行咨询),这里不做介绍;其次,将电脑的ip设置与hikvision同频段,一般来说,海康威视的ip为192.168.1.64,电脑设置如下:最后,使用IE浏览器(其他可能不支持),输入ip:192.168.1.64并登陆输入用户名和密码即可获取视频画面(可以观察到,视频有畸变)使用python+openCV获取监控画面在使用openCV获取监控画面,具体代码如下url格式为:“rtsp:

    2022年10月18日
    4
  • cpu,核心数,线程抢占式分配理解,时间分片机制总结,进程和线程关系及区别,[通俗易懂]

    cpu,核心数,线程抢占式分配理解,时间分片机制总结,进程和线程关系及区别,[通俗易懂]cpu,核心数,线程抢占式分配理解,时间分片机制总结,进程和线程关系及区别,

    2022年4月23日
    266
  • SSO单点登录简单实现

    SSO单点登录简单实现通过 cookie 来实现单点登录 1 单点登录的流程 cookie 是用来在客户端存储数据的工具 在其中一个子系统登录 跳转到登录系统 登陆系统登陆完成 完成登录后会向发起登录的子系统写入一个 cookie 保存用于认证用户是否登录的信息 token 其他子系统向服务器发起请求的时候 携带这个 cookie 完成登录 cookie 的域要是所有子系统相同的域 这样所有子系统才能访问到这个 cookie 2 单点登录流程图 2 单点登录的编码 部分核心代码 代码链接 https gitee com yueh

    2025年8月2日
    4
  • eclipse导入本地Java项目

    eclipse导入本地Java项目之前都是在 eclipse 下直接建立 Java 项目的 今天做一个项目时 需要把做好的项目压缩发送给别人 让别人来运行该项目 就需要写一个简单的操作说明给对方 方便对方使用 然而发现自己不会 对此 说一下如何把本地 Java 项目导入 eclipse 来运行该项目 步骤一 首先打开 eclipse 点击左上角 File 步骤二 点击 Import 步骤三 点击 General

    2026年3月26日
    1
  • 智能避障小车_基于单片机的智能玩具车系统设计

    智能避障小车_基于单片机的智能玩具车系统设计【1】背景意义近些年随着国民生活水平的提升,以小车为载体的轮式机器人进入了我们的生活,尤其是在一些布线复杂困难的安全生活区和需要监控的施工作业场合都必须依赖轮式机器人的视频监控技术。因此,基于嵌入式技术的无线通信视频监控轮式机器人应运而生。由于它们与人类工作相比具有成本低廉、安全稳定的优点,目前已经在许多危险作业以及工业场合得到了广泛应用而且轮式机器人不需要像人那样采取过多的保护措施,因此轮式机…

    2022年10月18日
    3

发表回复

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

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