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输入框带清空按钮

检测edittext中文字的输入状态,清空内容

import android.text.Editable; import android.text.TextUtils; import android.text.TextWatcher; import...
  • lonewolf521125
  • lonewolf521125
  • 2015年04月27日 10:07
  • 5825

Android清空编辑框数据功能的实现

引言在项目开发中你肯定会遇到这样的需求,输入到EditText中的数据一个一个清理太麻烦了,需要有一个按钮直接能实现一次删除整个EditText控件中的数据,那么接下来我就给大家封装一个方法,有这样的...
  • zoucanfa
  • zoucanfa
  • 2017年03月08日 18:48
  • 1149

android之自定义带清除内容的EditText

android之自定义带清楚内容的EditText      android在很多地方需要用输入框EditText,输入的内容可以完全清除,这样做的好处,是在有的地方用户体验更好,比如用户在注册登...
  • u011747761
  • u011747761
  • 2015年02月14日 13:18
  • 3521

Android仿微信带清除功能的输入框ClearEditText的实现

今天跟大家分享一个控件ClearEditText-带清除功能的输入框。其实这个控件在IOS中很简单,只需要设置属性即可,但是在Android中就变得不是那么容易了。先说说我自己的设计思路:首先,输入框...
  • u013220682
  • u013220682
  • 2016年03月23日 19:15
  • 1360

Android 带清除功能的输入框控件ClearEditText,仿IOS的输入框

今天给大家带来一个很实用的小控件ClearEditText,就是在Android系统的输入框右边加入一个小图标,点击小图标可以清除输入框里面的内容,IOS上面直接设置某个属性就可以实现这一功能,但是A...
  • xiaanming
  • xiaanming
  • 2013年09月04日 17:33
  • 75799

android 带清除功能的EditText

点击清除图标清除输入框中的内容,输入框中没有内容的时候,清除图标不显示...
  • xubeiqiannian
  • xubeiqiannian
  • 2015年06月02日 20:57
  • 1914

Android中ClearEditText实现点击EditText输入框右边清除图标来清除输入内容的两种方式

两种EditText输入框点击右边清除图标来实现清除功能的方式。 效果图下图: 布局代码如下, ...
  • daitu_liang
  • daitu_liang
  • 2015年09月25日 11:28
  • 5385

带有一键清空功能的EditText

介绍  很常见的一个功能,大部分app在登录界面都会实现这个功能了。因为在掘金上看了一篇类似的文章,所以决定自己实践一下。   下图为实现效果:常见实现方法 组合控件,EditText + Butt...
  • Siobhan
  • Siobhan
  • 2016年07月11日 14:23
  • 2745

自定义EditText-文本内容清空或者删除

import android.annotation.SuppressLint; import android.content.Context; import android.graphics.draw...
  • dwf_android
  • dwf_android
  • 2017年01月05日 09:47
  • 442

Android Studio EditText点击图标清除文本内容

这篇文章是继自定义EditText样式之后的功能强化,对于实际应用项目有很大的参考意见,感兴趣的朋友可以移步上一篇,”Android Studion自定义EditText样式”.具体清除EditTex...
  • li1996heng
  • li1996heng
  • 2016年11月29日 11:18
  • 3400
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android自定义组件EditText,带清空输入内容图标
举报原因:
原因补充:

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