package com.example.traindemo.util;
import java.util.Calendar;
import com.example.traindemo.R;
import android.app.DatePickerDialog;
import android.content.Context;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.widget.DatePicker;
import android.widget.EditText;
/**
* @2014-12-09 10:58:24
* @author lxg
*
*/
public class EditTextWithDate extends EditText {
private final static String TAG = "EditTextWithDate";
private Drawable dateIcon;
private Context mContext;
private Calendar c;
private int mYear;
private int mMonth;
private int mDay;
private boolean datePickerEnabled = true;
public EditTextWithDate(Context context) {
super(context);
mContext = context;
init();
}
public EditTextWithDate(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
init();
}
public EditTextWithDate(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
mContext = context;
init();
}
private void init() {
dateIcon = mContext.getResources().getDrawable(R.drawable.ic_launcher);
dateIcon.setBounds(-11, 0, 70, 70);
setCompoundDrawables(null, null, dateIcon, null);
// setCompoundDrawablesWithIntrinsicBounds(null, null, dateIcon, null);
c = Calendar.getInstance();
final Calendar cal = Calendar.getInstance();
mYear = cal.get(Calendar.YEAR); // 获取当前年份
mMonth = cal.get(Calendar.MONTH);// 获取当前月份
mDay = cal.get(Calendar.DAY_OF_MONTH);// 获取当前月份的日期号码
this.setEnabled(false);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (dateIcon != null && event.getAction() == MotionEvent.ACTION_UP) {
int eventX = (int) event.getRawX();
int eventY = (int) event.getRawY();
Log.e(TAG, "eventX = " + eventX + "; eventY = " + eventY);
Rect rect = new Rect();
getGlobalVisibleRect(rect);
rect.left = rect.right - 81;
if (rect.contains(eventX, eventY)) {
if (datePickerEnabled) {
new DatePickerDialog(mContext,
new DatePickerDialog.OnDateSetListener() {
public void onDateSet(DatePicker view,
int year, int monthOfYear,
int dayOfMonth) {
mYear = year;
mMonth = monthOfYear;
mDay = dayOfMonth;
setText(new StringBuilder().append("")
.append(mYear).append("-")
.append(mMonth + 1).append("-")
.append(mDay).append(""));
}
}, c.get(Calendar.YEAR), c.get(Calendar.MONTH),
c.get(Calendar.DAY_OF_MONTH)).show();
}
}
}
return super.onTouchEvent(event);
}
public boolean isDatePickerEnabled() {
return datePickerEnabled;
}
public void setDatePickerEnabled(boolean datePickerEnabled) {
this.datePickerEnabled = datePickerEnabled;
if (!datePickerEnabled) {
setText("");
}
}
}
自定义带删除功能的EditText
package com.example.view;
import com.example.ui.R;
import android.content.Context;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import android.view.View.OnFocusChangeListener;;
public class EditTextWithDelete extends EditText implements OnFocusChangeListener{
private Drawable imgEnable;
private Context context;
public EditTextWithDelete(Context context) {
super(context);
this.context = context;
init();
public EditTextWithDelete(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
this.context = context;
init();
}
public EditTextWithDelete(Context context, AttributeSet attrs) {
super(context, attrs);
this.context = context;
init();
}
private void init() {
//获取图片资源
imgEnable = context.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) {
}
public void afterTextChanged(Editable s) {
setDrawable();
Toast.makeText(context, getText(), 10).show();
}
});
setDrawable();
}
/**
* 设置删除图片
*/
private void setDrawable() {
if(length() == 0) {
setCompoundDrawablesWithIntrinsicBounds(null, null, null, null);
}else {
setCompoundDrawablesWithIntrinsicBounds(null, null, imgEnable, null);
}
}
/**
* event.getX() 获取相对应自身左上角的X坐标
* event.getY() 获取相对应自身左上角的Y坐标
* getWidth() 获取控件的宽度
* getTotalPaddingRight() 获取删除图标左边缘到控件右边缘的距离
* getPaddingRight() 获取删除图标右边缘到控件右边缘的距离
* getWidth() - getTotalPaddingRight() 计算删除图标左边缘到控件左边缘的距离
* getWidth() - getPaddingRight() 计算删除图标右边缘到控件左边缘的距离
*/
public boolean onTouchEvent(MotionEvent event) {
if(imgEnable != null && event.getAction() == MotionEvent.ACTION_UP) {
int x = (int) event.getX() ;
//判断触摸点是否在水平范围内
boolean isInnerWidth = (x > (getWidth() - getTotalPaddingRight())) &&
(x < (getWidth() - getPaddingRight()));
//获取删除图标的边界,返回一个Rect对象
Rect rect = imgEnable.getBounds();
//获取删除图标的高度
int height = rect.height();
int y = (int) event.getY();
//计算图标底部到控件底部的距离
int distance = (getHeight() - height) /2;
//判断触摸点是否在竖直范围内(可能会有点误差)
//触摸点的纵坐标在distance到(distance+图标自身的高度)之内,则视为点中删除图标
boolean isInnerHeight = (y > distance) && (y < (distance + height));
if(isInnerWidth && isInnerHeight) {
setText("");
}
}
return super.onTouchEvent(event);
}
@Override
protected void finalize() throws Throwable {
super.finalize();
}
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus) {
setDrawable();
}else {
setCompoundDrawablesWithIntrinsicBounds(null, null, null, null);
}
}
}