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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 解决touchStart滑动时触发点击事件「建议收藏」

    解决touchStart滑动时触发点击事件「建议收藏」由于我们在将点击事件委托到div,span,font,p等元素标签上时会导致移动端的ios设备无法识别这个点击事件(一般指click事件),此时我们一般会使用touchstart来替换click事件,但是使用touchstart来代替click事件的弊端就立刻显示出来,每当我们滑动屏幕时就会立刻出发点击事件此时加入我这个封装的方法,这个弊端就会迎刃而解functiontap(el,fn…

    2022年6月19日
    27
  • J2EE架构师之路「建议收藏」

    J2EE架构师之路「建议收藏」不经意的回首,工作进入第五个年头了,发现走过了从Java程序员到J2EE架构师的历程。发现电脑上安装了各种各样的J2EE工具:JBuilder,WSAD,Eclipse,Rose,Together,Weblogic,Jtest,Optimizator,Mysql…发现电脑上保存了各种各样的OpenSource项目:Tomcat,JBoss,Ant,Hibernate,Spr

    2022年6月30日
    27
  • 菜鸟的数学建模之路(一):最短路径算法「建议收藏」

    菜鸟的数学建模之路(一):最短路径算法「建议收藏」最短路径算法主要有两种,Dijkstra算法和floyd算法,当时在学习这两种算法时经常弄混了,关于这两种算法,记得当时是在交警平台设置的那一道题目上了解到的,就去查很多资料,花了不少时间才基本了解了这两种算法的基本用法,在总结的时候,我更多的是用代码的方式去做的总结,当时想的是等到要用的时候,直接改一下数据,运行代码,得到想要的最短路径就可以了。记得我们老师说过数学建模的知识没必要过于深入的去学…

    2022年6月4日
    157
  • Netstat 网络命令详解

    Netstat 网络命令详解Netstat简介Netstat是一款命令行工具,可用于列出系统上所有的网络套接字连接情况,包括tcp,udp以及unix套接字,另外它还能列出处于监听状态(即等待接入请求)的套接字。

    2022年7月3日
    18
  • goland激活码2021最新破解方法

    goland激活码2021最新破解方法,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月14日
    256
  • 使用 Preload&Prefetch 优化前端页面的资源加载「建议收藏」

    使用 Preload&Prefetch 优化前端页面的资源加载「建议收藏」对于前端页面来说,静态资源的加载对页面性能起着至关重要的作用。本文将介绍浏览器提供的两个资源指令-preload/prefetch,它们能够辅助浏览器优化资源加载的顺序和时机,提升页面性能。一、从一个实例开始如上图所示,我们开发了一个简单的收银台,支付过程中可以展开优惠券列表选择相应的券。从动图可以看到,列表第一次展开时,优惠券背景有一个逐渐显示的过程,体验上不是很好。问题的原因也很明显,由于背景使用了视觉特意设计的图片,优惠券列表展开时需要去加载图片,背景渐显的过程实际上就是图片加载的过程

    2025年6月25日
    4

发表回复

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

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