针对edittex添加图标,对非图标区域点击事件处理
在工作中经常遇到一些小问题,总爱忘记,特此记录以备以后翻阅。
对于EditText控件,添加图标,如图点击删除图标,内容清楚,不弹出时间控件,点击非删除按钮区域,则弹出时间控件
一、要实现图上效果有很多方式:
1、放一个EditText,再放一个Button
2、自定义一个EditText,Right放一个图标
第一种就不说了,无非就是模拟出来那种效果,直接说第二种。
自定义EditText,下面是主要的事件逻辑
// 输入事件处理 @Override public boolean onTouchEvent(MotionEvent event) { if (mRight != null && event.getAction() == MotionEvent.ACTION_UP) { this.mBounds = mRight.getBounds(); mRight.getIntrinsicWidth(); int eventX = (int) event.getX(); int width = mBounds.width(); int right = getRight(); int left = getLeft(); if (eventX > (right - width * 2 - left)) { setText(""); event.setAction(MotionEvent.ACTION_CANCEL); } }
}
onTouchEvent为EditText控件的事件,但主要是用来控制删除按钮,点击删除按钮实现的效果是由点击位置来决定的,从上面代码可以看出来,我们通过点击的位置是否属于删除按钮的位置范围,来决定是否点击了删除按钮,event.getX()为点击的位置,mBounds.width()为删除按钮的宽度,getRight()为EditText控件右边界对于父控件的位置,getLeft()则为左边界位置,因此我们可以得出,删除按钮对于父控件的起始位置=right-width-left就为相对于父控件的位置,到这里上面事件就完成了。
二、完成时间控件的控制
这一步主要完成点击控制弹出时间控件就OK了,那相应的代码就如下,代码很普通,就不多加注释了。
//开始时间选择 statics_search_begin_time_et.setText(datefmtDate .format(dateAndTime.getTime())); statics_search_begin_time_et.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) {
//获取删除图标 Drawable drawable = statics_search_begin_time_et.getCompoundDrawables()[2]; if (event.getX() < statics_search_begin_time_et.getWidth() - statics_search_begin_time_et.getPaddingRight() - (drawable == null ? 0 : drawable.getIntrinsicWidth()) && event.getAction() == MotionEvent.ACTION_UP) { DatePickerDialog datePickerDialog = new DatePickerDialog( mContext, new DatePickerDialog.OnDateSetListener() { public void onDateSet(DatePicker paramDatePicker, int paramInt1, int paramInt2, int paramInt3) { dateAndTime.set(Calendar.YEAR, paramInt1); dateAndTime.set(Calendar.MONTH, paramInt2); dateAndTime.set(Calendar.DAY_OF_MONTH, paramInt3); statics_search_begin_time_et.setText(datefmtDate .format(dateAndTime.getTime())); beginTime = statics_search_begin_time_et.getText().toString(); } }, year, month, day); datePickerDialog.setTitle("开始日期"); datePickerDialog.show(); } return false; } });