您的位置:首页 > 其它

自带删除功能的输入框——在登录,搜索等地方经常用到可以直接用

2014-11-24 18:00 525 查看
先看下效果图:0分代码下载,可以直接用



功能的实现,是通过一个Rect来实现好像是点击图片,删除内容的。为什么是好像,因为这张图片本来就获取不到点击事件,反正这不是通过这个方法实现的。Rect顾名思义,就是一个方形的区域,他有三个构造方法,new Rect();new Rect(Rect t);new Rect(int left, int top, int right, int botton)。

从第一个开始说啊new Rect(),英语厉害的直接看文档,反正我的英语不怎么样,我做了几个实验,他会创建一个和父组件大小的这么一个方形区域,例如我在一个宽高100*50的LinearLayout中创建一个Rect(),这个方形区域就是填充他的父组件,他的宽高也是父组件这么大。

ok,第二个new Rect(Rect t);就相当于是在创建一个一模一样的t。

第三个,new Rect(int left, int top, int right, int botton),这四个参数是啥啊,咱们画画吧,例如我是这么创建的new Rect(150, 75, 260, 120)

这四个 参数 分别代表的意思是:left top right bottom 上下左右呗。啊,不就是 左 上 右 下。 下面给大家解释

left : 矩形左边的X坐标 150 ---->图片中的A点

top: 矩形顶部的Y坐标 75 ---->图片中的B点

right : 矩形右边的X坐标 260 ----->图片中的C点

bottom: 矩形底部的Y坐标 120 ------->图片中的D点



哈哈,怎么样,这个区域出来了吧,现在问题来了,如果咱们传的这个区域比咱们的手机的屏幕还大怎么办呢?Android很NB,凉拌,超出屏幕的区域不要了,就这么狂。其实想想也能想明白,本来你也用不到啊,呵呵。

我的实现就是通过第一种方法实现的,然后自己再调整这个方形区域的左右区域,调整到图片上,然后你们看代码吧

/**
* 带删除功能的输入框,经常用在搜索框或者登录中经常用的,可以直接使用
*
* @author luckchoudog
*/
public class EditTextWithDel extends EditText {
private final static String TAG = EditTextWithDel.class.getSimpleName();
private Drawable imgInable;
private Drawable imgAble;
private Context mContext;

public EditTextWithDel(Context context) {
super(context);
mContext = context;
init();
}

public EditTextWithDel(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
mContext = context;
init();
}

public EditTextWithDel(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
init();
}

private void init() {
imgInable = mContext.getResources().getDrawable(R.drawable.delete_gray);
imgAble = mContext.getResources().getDrawable(R.drawable.delete);
addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}

@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}

@Override
public void afterTextChanged(Editable s) {
setDrawable();
}
});
setDrawable();
}

// 设置删除图片
private void setDrawable() {
if (length() < 1)
setCompoundDrawablesWithIntrinsicBounds(null, null, imgInable, null);
else
setCompoundDrawablesWithIntrinsicBounds(null, null, imgAble, null);
}

// 处理删除事件
@Override
public boolean onTouchEvent(MotionEvent event) {
if (getText() != null && event.getAction() == MotionEvent.ACTION_UP) {
int eventX = (int) event.getRawX();
int eventY = (int) event.getRawY();
Rect rect = new Rect();
getGlobalVisibleRect(rect);
rect.left = rect.right - imgAble.getMinimumWidth() - this.getPaddingLeft();
rect.right = rect.right - this.getPaddingLeft();
Log.d(TAG, "eventX : " + eventX + "; eventY : " + eventY);
Log.d(TAG, "rect_left : " + rect.left + "; rect_top : " + rect.top + "; rect_right : " + rect.right + "; rect_bottom : " + rect.bottom);
if (rect.contains(eventX, eventY))
setText("");
}
return super.onTouchEvent(event);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐