点击TextView 弹出复制选项
extends:http://www.eoeandroid.com/thread-226805-1-1.html
package com.dotfive.chuanbang.view; import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.ShapeDrawable;
import android.graphics.drawable.shapes.OvalShape;
import android.text.ClipboardManager;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.PopupWindow;
import android.widget.PopupWindow.OnDismissListener; import com.dotfive.chuanbang.R;
import com.rockerhieu.emojicon.EmojiconTextView; public class CopyTextView extends EmojiconTextView {
private Context mContext;
private PopupWindow mPopupWindow; public CopyTextView(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
this.setOnLongClickListener( new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
setTextColor(Color.BLACK);
getPopupWindowsInstance();
mPopupWindow.showAsDropDown(CopyTextView.this,getWidth()/2-mPopupWindow.getWidth()/2,0);
return true;
}
});
} @Override
public boolean onTouchEvent(MotionEvent event) {
return super.onTouchEvent(event);
}
/**
* 销毁 PopupWindow
*/
private void dismissPopupWindowInstance(){
if (null != mPopupWindow) {
mPopupWindow.dismiss();
}
}
/**
* 获得 PopupWindow 实例
*/
private void getPopupWindowsInstance(){
if(mPopupWindow!=null){
mPopupWindow.dismiss();
}else{
initPopuptWindow();
}
}
/*
* 创建PopupWindow
*/
private void initPopuptWindow() {
LayoutInflater layoutInflater = LayoutInflater.from(mContext);
View popupWindow = layoutInflater.inflate(R.layout.item_textview_copy_popup_window, null);
Button btnCopy = (Button) popupWindow.findViewById(R.id.btnCopy);
btnCopy.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
setTextColor(android.graphics.Color.BLACK);
dismissPopupWindowInstance();
ClipboardManager clipboard = (ClipboardManager) mContext.getSystemService(Context.CLIPBOARD_SERVICE);
clipboard.setText(getText());
}
});
// 此处 之所以 给了 PopupWindow 一个 固定的宽度 是因为 我要让 PopupWindow 的中心位置对齐 TextView的中心位置
// 一开始 写成了ViewGroup.LayoutParams.WRAP_CONTENT 但是 各种尝试之后 我没办法 得到 PopupWindow 的宽度 如果你能获得的话 麻烦留言 告诉我
mPopupWindow = new PopupWindow(popupWindow, dipTopx(mContext, 50),ViewGroup.LayoutParams.WRAP_CONTENT);
// 这行代码 很重要
mPopupWindow.setBackgroundDrawable(getDrawable());
mPopupWindow.setOutsideTouchable(true);
mPopupWindow.setOnDismissListener(new OnDismissListener() {
@Override
public void onDismiss() {
setTextColor(mContext.getResources().getColorStateList(R.color.littleGray));
}
});
}
/**
* 生成一个 透明的背景图片
* @return
*/
private Drawable getDrawable(){
ShapeDrawable bgdrawable =new ShapeDrawable(new OvalShape());
bgdrawable.getPaint().setColor(getResources().getColor(android.R.color.transparent));
return bgdrawable;
}
/**
* 转换成对应的px值
* @param context
* @param dipValue
* @return
*/
public static int dipTopx(Context context, float dipValue){
final float scale = context.getResources().getDisplayMetrics().density;
return (int)(dipValue * scale + 0.5f);
}
}
点击TextView 弹出复制选项的更多相关文章
- Android定位&地图&导航——基于百度地图,实现自定义图标绘制并点击时弹出泡泡
一.问题描述 上一次我们使用百度地图实现基本的定位功能,接下来我们继续实现搜索和定位,并使用LocationOverlay绘制定位位置,同时展示如何使用自定义图标绘制并点击时弹出泡泡 如图所示: 二. ...
- jQuery点击图片弹出放大可拖动图片查看
CSS代码: .popup-bigic { position: absolute; ; ; background: #eee; overflow: hidden; ; } .popup-bigic . ...
- ExtJs 4.2.1 点击按钮弹出表单的窗口
初学ExtJs,做项目的时候想做一个这样的效果:点击按钮弹出对话框,之前一直是使用EasyUi来做的, EasyUi里有Dialog,用起来很方便,但是现在转移到ExtJs上后,发现没有Dialog这 ...
- JavaScript实现点击按钮弹出输入框,点确定后添加li组件到ul组件里
JavaScript实现点击按钮弹出输入框,点确定后添加li组件到ul组件里 <!doctype html> <html manifest="lab4.manifest&q ...
- 点击文字弹出一个DIV层窗口代码
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <hea ...
- 请写出一段JavaScript代码,要求页面有一个按钮,点击按钮弹出确认框。程序可以判断出用
请写出一段JavaScript代码,要求页面有一个按钮,点击按钮弹出确认框.程序可以判断出用 户点击的是“确认”还是“取消”. 解答: <HTML> <HEAD> <TI ...
- Html : 点击按钮弹出输入框,再次点击进行隐藏
上代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3 ...
- (转载) EditText初始不弹出软键盘,只有光标显示,点击再弹出
EditText初始不弹出软键盘,只有光标显示,点击再弹出 2013-06-08 10:13 21305人阅读 评论(5) 收藏 举报 分类: android基础(91) 版权声明:本文为博主原创 ...
- jquery点击按钮弹出图片
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
随机推荐
- html5 websocket + node.js 实现网页聊天室
1 client: socket.io server: node.js + express + socket.io 一个简单的聊天室 demo,没有注册,内置了一些测试用户 2 cli ...
- ThinkPHP3.2 介绍
模块化 驱动化 为云平台而生ThinkPHP3.2正式版发布! ThinkPHP是国内领先的WEB应用开发框架,诞生于2006年初,在国内具有良好的口碑和广大的用户群,秉承了大道至简的开发理念,让WE ...
- 关于Unity中物理引擎的使用
物理引擎控制刚体,刚体上面贴上图片,所以看起来就是游戏运行起来的状态 物理世界计算刚体的运行状态,通过贴图显现出运算结果. 一.物理引擎 1:Unity 2D物理引擎基于Box2D封装而成;2: 物理 ...
- mongodb自动关闭:页面太小,无法完成操作
解决方法: 增大虚拟内存
- AngularJS开发经验
AngularJS是为了克服HTML在构建应用上的不足而设计的.HTML是一门很好的为静态文本展示设计的声明式语言,但要构建WEB应用的话它就显得乏力了.所以我做了一些工作(你也可以觉得是小花招)来让 ...
- MySQL无法远程连接解决方案
1.查看/etc/mysql/my.cnf配置文件是否只允许本地连接 注释配置:#bind-address = 127.0.0.1,重启MySQL Server 2.防火墙(我用的是iptables) ...
- 【Java面试题】41 两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
对. 如果对象要保存在HashSet或HashMap中,它们的equals相等,那么,它们的hashcode值就必须相等. 如果不是要保存在HashSet或HashMap,则与hashcode没有什么 ...
- Unity延迟和重复调用方法
延迟调用方法 Invoke(arg1,arg2) arg1 是延迟调用的字符串方法名,arg2是延迟多少时间调用arg1 方法. 重复调用方法 InvokeRepeating(arg1,arg2,ar ...
- tagVARIANT、VARIANT、_variant_t和COleVariant
tagVARIANT是一个结构体struct: C++ Code: tagVARIANT 123456789101112131415161718192021222324252627282930313 ...
- mysql中什么是逻辑备份
需求描述: mysql中,或者说关系型数据库中逻辑备份到底指的是什么呢,主要还是对于 概念的理解,在此记录下. 概念解释: 逻辑备份:主要指的是保存数据库的逻辑结构(比如:create dattaba ...