Android仿QQ复制昵称效果
本文同步自http://javaexception.com/archives/76
背景:
这几天做一个复制文本的需求,突然看到QQ上复制昵称跟QQ号的效果,觉得很不错,就想要模仿一波,办法比较简单粗暴,反编译QQ获取了那个.9图片,然后就是用PopWindow实现了。
解决办法:
自定义PopWindow
public class CopyContentPopWindow extends PopupWindow {
private final View content;
TextView tvLabel;
TextView tvLabelFake;
Activity context;
private OnCopyContentListener onCopyContentListener;
public CopyContentPopWindow(Activity context) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
content = inflater.inflate(R.layout.popwindow_copy_content, null);
tvLabel = content.findViewById(R.id.tv_label);
tvLabelFake = content.findViewById(R.id.tv_label_fake);
tvLabel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (onCopyContentListener != null) {
onCopyContentListener.copyContent();
}
CopyContentPopWindow.this.dismiss();
}
});
this.setContentView(content);
this.setWidth(ViewGroup.LayoutParams.WRAP_CONTENT);
this.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
this.setFocusable(true);
this.setOutsideTouchable(true);
this.update();
ColorDrawable dw = new ColorDrawable(0000000000);
this.setBackgroundDrawable(dw);
this.context = context;
}
public void setTvLabel(String text) {
tvLabel.setText(text);
tvLabelFake.setText(text);
update();
}
public void setOnCopyContentListener(OnCopyContentListener onCopyContentListener) {
this.onCopyContentListener = onCopyContentListener;
}
public void showPopupWindow(View parent) {
if (!this.isShowing()) {
int[] location = new int[2];
parent.getLocationOnScreen(location);
// this.showAsDropDown(parent, 0, 0);
showAtLocation(parent, Gravity.NO_GRAVITY, location[0], location[1]);
} else {
this.dismiss();
}
}
public interface OnCopyContentListener {
void copyContent();
}
}
具体使用代码:
public class MainActivity extends AppCompatActivity {
TextView tvNickName;
TextView tvQQNum;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvNickName = findViewById(R.id.tv_nick_name);
tvQQNum = findViewById(R.id.tv_qq_num);
tvNickName.setOnClickListener(v -> {
CopyContentPopWindow copyContentPopWindow = new CopyContentPopWindow(MainActivity.this);
copyContentPopWindow.setTvLabel("复制");
copyContentPopWindow.setOnCopyContentListener(() -> {
ClipboardManager cm = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clipData = ClipData.newPlainText("Label", tvNickName.getText().toString());
cm.setPrimaryClip(clipData);
Toast.makeText(MainActivity.this, "复制成功", Toast.LENGTH_LONG).show();
});
copyContentPopWindow.showPopupWindow(tvNickName);
});
tvQQNum.setOnClickListener(v -> {
CopyContentPopWindow copyContentPopWindow = new CopyContentPopWindow(MainActivity.this);
copyContentPopWindow.setTvLabel("复制QQ号");
copyContentPopWindow.setOnCopyContentListener(() -> {
ClipboardManager cm = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clipData = ClipData.newPlainText("Label", "100001");
cm.setPrimaryClip(clipData);
Toast.makeText(MainActivity.this, "复制成功", Toast.LENGTH_LONG).show();
});
copyContentPopWindow.showPopupWindow(tvQQNum);
});
}
}
代码下载地址
链接:https://pan.baidu.com/s/1jChJvQ9i6JrfFqwU3q1Mtg 密码:lsf7
其他相关
同事找到了一个不错的开源项目,https://github.com/shangmingchao/PopupList 突然觉得这个用起来更容易,下篇来写。
Android仿QQ复制昵称效果的更多相关文章
- Android仿QQ复制昵称效果2
本文同步自http://javaexception.com/archives/77 背景: 在上一篇文章中,给出了一种复制QQ效果的方案,今天就来讲讲换一种方式实现.主要依赖的是一个开源项目https ...
- android采用MVP完整漫画APP、钉钉地图效果、功能完善的音乐播放器、仿QQ动态登录效果、触手app主页等源码
Android精选源码 一个可以上拉下滑的Ui效果,觉得好看可以学学 APP登陆页面适配 一款采用MVP的的完整漫画APP源码 android实现钉钉地图效果源码 一个使用单个文字生成壁纸图片的app ...
- Android仿QQ ios dialog,仿QQ退出向上菜单
Android仿QQ ios dialog,仿QQ退出向上菜单 EasyDialog两种模式 仿QQ退出向上菜单,自己定义向上菜单 github地址:https://gith ...
- Android 仿QQ首页的消息和电话的切换,首页的头部(完全用布局控制)
Android 仿QQ首页的消息和电话的切换,首页的头部(完全用布局控制) 首先贴上七个控制布局代码 1.title_text_sel.xml 字体颜色的切换 放到color文件夹下面 <?xm ...
- android 仿QQ手机版
千人2群开启,欢迎大家围观打酱油,群号145667827 您当前位置 : JavaApk-安卓应用游戏源码服务专家 » QQ » Android项目源码界面超级华丽的仿QQ最新版本 Andro ...
- Android仿QQ界面
最近这几天,一直跟着朋友们聚会什么的,没怎么做项目,今天总算是有时间开电脑继续做我的项目了.下面我就把我做的效果展示一下. 这是模仿了qq的界面效果.因为代码比较长就不粘贴代码了.需要的小伙伴可以跟我 ...
- Android仿QQ登录下拉历史列表
demo中包含了Sqlite数据库增删改查,对存储的账号进行按照最新的时间排序,限制了最多存储5条数据. 效果图: 1.首先创建MyHelper建表: public class MyHelper ex ...
- Android仿QQ窗口的抖动的动画效果
就是仿照QQ窗口的抖动效果,在项目的res下创建anim文件夹,再创建两个xml文件:cycle.xml . myanim.xml cycle.xml : <?xml version ...
- Android仿qq聊天记录长按删除功能效果
最近项目在做IM即时通讯开发,在删除聊天列表的时候跟删除聊天详细信息的时候,产品经理想要跟ios一样,在当前选中行上方弹出一个删除窗口.于是先从网上找demo,找了一个发现是Dialog做的,我感觉没 ...
随机推荐
- html5使用local storage存储的数据在本地是以何种形式保存的
html5使用local storage存储的数据是如何保存在本地的?(我使用的是chrome浏览器,chrom浏览器是用sqlite来保存本地数据的) Html5 的local storage 是通 ...
- 【程序员技术练级】学习一门脚本语言 python(二)遍历本地文件系统
这篇将讲述怎么使用python来遍历本地文件系统,并把文件按文件大小从小到大排序的一个小例子 在这个例子中,主要会用到python内置的和OS模块的几个函数: os.walk() : 该方法用来遍历指 ...
- Go语言下载网络图片或文件
最近闲来无事, 于是就简单学习了下Go语言的基本的用法.由于实践才是最快的学习方法,所以这里就以下载网络图片或文件入手来学习Go语言 文件下载到本地,通常的思路就是先获得网络文件的 输入流 以及本地文 ...
- HttpServlet的请求转发理解
一个http请求的流转,其实主要涉及到五部分的内容,第一部分就是request所包含的参数,也就是request.getAttribute能获取的东西:第二部分是request所携带的内容实体,这部分 ...
- js中函数带不带var的本质区别是什么
本质区别是:带var的是定义,属于statement:不带var的是赋值,属于expression.不带var时,解释器认为变量已经定义过了,会在函数中找相应的定义,如果找不到,就会认为变量是在外一层 ...
- indexOf.substr,substring,charAt的区别
var a = "asdfghjkl" alert(a.substr(1, 3)); // 从下标为1开始,往右数3个长度的数, 显示 sdf; alert(a.s ...
- java ReentrantLock Condition
sychronized.wait.notify.notifyAll.sleep 在多线程环境下,为了防止多个线程同时调用同一个方法.修改同一份变量,造成数据读取结果混乱,可以使用synchronize ...
- .Net下Redis使用注意事项
.Net下Redis使用注意事项 注:Redis的安装方法和桌面端工具很多,不在本文讨论范围内. 一:不结合适用场景的技术都是耍流氓,Redis主要适用场景: 简单字符串缓存 简单队列 简单发布订阅 ...
- Git for Android Studio 学习笔记
http://learngitbranching.js.org/ 一个特别好的git学习教程 创建一个project,然后导入github
- CPU调度
概念 1.控制,协调进程对CPU的竞争,按一定的调度算法从就绪队列中选择一个进程把CPU的使用权交给被选中的进程, 如果没有就绪进程,系统会安排一个系统空闲进程或idle进程 cpu调度要解决的三个问 ...