Android自定义组件EditText,带清空输入内容图标

原创 2016年08月29日 17:37:53

自定义EditText组件MyEditText.java

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);
    }
}

XML布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <RelativeLayout
                android:id="@+id/domainLayout"
                android:layout_width="match_parent"
                android:layout_height="50dip"
                android:orientation="horizontal"
                android:layout_gravity="center"
                >
        <TextView android:layout_width="70dip"
            android:layout_height="match_parent"
            style="@style/text_s28_1c1c1c"
            android:gravity="right|center"
            android:text="用户名:"/>
        <com.ziniu.mobile.module.ui.component.ZiniuEdit
            android:id="@+id/domain"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:paddingLeft="75dip"
            android:paddingRight="5dip"
            android:layout_marginLeft="10dip"
            android:layout_marginRight="10dip"
            //文本框为空时提示文字颜色
            android:textColorHint="@color/wechat_text_gray"
            //文本框样式
            style="@style/text_s28_1c1c1c"
            //文本框为空时提示文字
            android:hint="请输入用户名"
            //文本框背景
            android:background="@drawable/edit_text"
            //加载文本框右端删除图标
            android:drawableRight="@drawable/edit_clear_48"
            //设置光标的颜色为@null,表示光标的颜色和输入框的字体颜色相同
            android:textCursorDrawable="@null"/>        

    </RelativeLayout>

</RelativeLayout>

参考:Android自定义EditText输入框带清空按钮

相关文章推荐

Android开发之自定义可清空内容的EditText

在开发过程中不可避免的总会遇到比如登录注册、用户信息修改等,这时候又是不可避免的会用到EditText控件。这个控件的使用频率虽然几乎类似我们吃饭用“筷子”的频率,but能不能用出花样,用的有技术就看...

Android 自定义EditText输入框 带清空按钮

总结 Android 自定义EditText输入框 带清空按钮 当用户输入字符后 EditText会自动在输入框的内部右侧出现删除按钮 重写EditText达到简化布局的效果 效果图: ...
  • aaawqqq
  • aaawqqq
  • 2014年10月07日 09:29
  • 24235

Android自定义组合控件--EditText和Button组合成带有清空EditText内容功能的复合控件

目标:实现textview和ImageButton组合,可以通过Xml设置自定义控件的属性。        通过代码或者通过xml设置自定义控件的属性...

android自定义带清空内容的TextView

android自定义带清空内容的TextView 代码: /** * 带删除按钮的EditText * @author Administrator * */ public class C...

Android中控制点击EditText输入框右边清空图标的显示与隐藏.

1.本文代码主要出自:http://blog.csdn.net/daitu_liang/article/details/48730889.   即其中第二种方法 2.重写EditText publi...

Android 自定义自动清空EditText

Android系统自带的EditText,虽然功能是实现了,但是总是感觉给人是缺胳膊少腿的。你就不能像ios一样,输入框的末尾加个小叉叉吗?通常Android要实现这个功能,很常见的是使用组合布局实现...

Android实战简易教程-第三十二枪(自定义View登录注册界面EditText-实现一键清空)

自定义View实现登录注册页面的EditText一键清空功能,效果如下: 输入框输入文字后自动出现一键清空键,输入框文字为空时,一键清空键隐藏,下面我们看一下如何通过自定义View实现这一效果。...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android自定义组件EditText,带清空输入内容图标
举报原因:
原因补充:

(最多只允许输入30个字)