Android 自定义EditText输入框 带清空按钮
当用户输入字符后 EditText会自动在输入框的内部右侧出现删除按钮,重写EditText达到简化布局的效果;用户想要清除输入内容时,直接点击右边的差号。



package com.example.myedittexttest;

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.widget.EditText;

public class MyEditText extends EditText {
private final String TAG = "MyEditText";
private Drawable dRight;
private Rect rBounds;

public MyEditText(Context paramContext) {
super(paramContext);
initEditText();
}

public MyEditText(Context paramContext, AttributeSet paramAttributeSet) {
super(paramContext, paramAttributeSet);
initEditText();
}

public MyEditText(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) {
MyEditText.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);
}
}

更多相关文章

  1. LinearLayout中的layout_weight属性
  2. Android(安卓)TextWatcher监控EditText中的输入内容并限制其输入
  3. setDefaultKeyMode 用法介绍
  4. android 监听EditText输入字符长度
  5. android的DialogFragment设置全屏之后,里面的View不能充满整个屏
  6. Android(安卓)Service完全解析(下)
  7. EditText的属性说明
  8. android - 自定义(组合)控件 + 自定义控件外观
  9. ActivityGroup中切换Activity

随机推荐

  1. 安装android studio遇到的问题及解决方案
  2. 解决使用android studio中的git update后
  3. 【乱】乱,乱,乱,android真乱!
  4. Android 辅助功能(无障碍)自定义开发类似微
  5. Android(安卓)Intent 常用的Flag
  6. 如何降低android应用程序的耗电量
  7. Android中Dialog设置外部点击事件
  8. android打开存储卡(TF卡\SD卡)中的sqlit
  9. 【转】Ubuntu下Adb调试Android找不到设备
  10. Android赢家密码(一)——什么是赢家密码