Android開發之 EditText 上的清空按鈕
阿新 • • 發佈:2019-01-08
Android開發時很多時候EditText 輸入框都需要一些 X 一類的清空按鈕,這樣就必須重寫EditText
public class UserPwdEditText extends EditText {
private final String TAG = "MyEditText";
private Drawable dRight;
private Rect rBounds;
public UserPwdEditText(Context paramContext) {
super(paramContext);
initEditText();
}
public UserPwdEditText(Context paramContext, AttributeSet paramAttributeSet) {
super(paramContext, paramAttributeSet);
initEditText();
}
public UserPwdEditText(Context paramContext,
AttributeSet paramAttributeSet, int paramInt) {
super(paramContext, paramAttributeSet, paramInt);
initEditText();
}
// 初始化edittext 控制元件
private void initEditText() {
setEditTextDrawable();
addTextChangedListener(new TextWatcher() { // 對文字內容改變進行監聽
@Override
public void afterTextChanged(Editable paramEditable) {
}
@Override
public void beforeTextChanged(CharSequence paramCharSequence,
int paramInt1, int paramInt2, int paramInt3) {
}
@Override
public void onTextChanged(CharSequence paramCharSequence,
int paramInt1, int paramInt2, int paramInt3) {
UserPwdEditText.this.setEditTextDrawable();
}
});
}
// 控制圖片的顯示
public void setEditTextDrawable() {
if (getText().toString().length() == 0) {
setCompoundDrawables(null, null, null, null);
} else {
setCompoundDrawables(null, null, this.dRight, null);
}
}
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
this.dRight = null;
this.rBounds = null;
}
/**
* 新增觸控事件 點選之後 出現 清空editText的效果
*/
@Override
public boolean onTouchEvent(MotionEvent paramMotionEvent) {
if ((this.dRight != null) && (paramMotionEvent.getAction() == 1)) {
this.rBounds = this.dRight.getBounds();
int i = (int) paramMotionEvent.getRawX();// 距離螢幕的距離
// int i = (int) paramMotionEvent.getX();//距離邊框的距離
if (i > getRight() - 3 * this.rBounds.width()) {
setText("");
paramMotionEvent.setAction(MotionEvent.ACTION_CANCEL);
}
}
return super.onTouchEvent(paramMotionEvent);
}
/**
* 顯示右側X圖片的
*
* 左上右下
*/
@Override
public void setCompoundDrawables(Drawable paramDrawable1,
Drawable paramDrawable2, Drawable paramDrawable3,
Drawable paramDrawable4) {
if (paramDrawable3 != null)
this.dRight = paramDrawable3;
super.setCompoundDrawables(paramDrawable1, paramDrawable2,
paramDrawable3, paramDrawable4);
}
}
佈局檔案是這樣的 要有一個圖片
<com.xinzhifu.view.UserPwdEditText
android:id="@+id/login_edtPwd"
android:layout_width="match_parent"
android:layout_height="55dp"
android:background="@null"
android:drawableRight="@drawable/ic_delete"
android:ems="10"
android:hint="@string/pwd"
android:inputType="textPassword"
android:paddingLeft="15dp"
android:paddingRight="15dp"
android:singleLine="true"
android:textColorHint="#999999"
android:textSize="15sp" />