自定义EditText实现可以一键删除输入的内容

public class MyEditText extends EditText {
    private Drawable dRight;
    private Rect rRounds;

    public MyEditText(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
        initEditText();
    }

    public MyEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
        // TODO Auto-generated constructor stub
        initEditText();
    }

    public MyEditText(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        // TODO Auto-generated constructor stub
        initEditText();
    }

    //初始化EditText
    private void initEditText(){
        setEditTextDrawable();
        addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                // TODO Auto-generated method stub
                MyEditText.this.setEditTextDrawable();
            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {
                // TODO Auto-generated method stub

            }

            @Override
            public void afterTextChanged(Editable s) {
                // TODO Auto-generated method stub

            }
        });

    }

    //控制图片的显示
    private void setEditTextDrawable() {
        // TODO Auto-generated method stub
        if(getText().toString().length() == 0){
            setCompoundDrawables(null, null, null, null);
        } else {
            setCompoundDrawables(null, null,this.dRight, null);
        }
    }

    @Override
    protected void onDetachedFromWindow() {
        // TODO Auto-generated method stub
        super.onDetachedFromWindow();
        this.dRight = null;
        this.rRounds = null;
    }

    //添加触摸事件,点击之后出现清空效果
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        // TODO Auto-generated method stub

        if((this.dRight != null) && (event.getAction() == 1)){
            this.rRounds = this.dRight.getBounds();
            int i = (int)event.getRawX();
            if(i>getRight() - 4 * this.rRounds.width()){
                setText("");
                event.setAction(MotionEvent.ACTION_CANCEL);
            }
        }

        return super.onTouchEvent(event);
    }

    //显示右侧删除图标
    @Override
    public void setCompoundDrawables(Drawable left, Drawable top,
            Drawable right, Drawable bottom) {
        // TODO Auto-generated method stub
        if(right != null){
            this.dRight = right;
        }
        super.setCompoundDrawables(left, top, right, bottom);
    }
}
时间: 2024-10-11 23:05:16

自定义EditText实现可以一键删除输入的内容的相关文章

自定义EditText实现一键删除数据

转载请注明出处http://blog.csdn.net/xiaanming/article/details/11066685 自定义EditText带删除小图标, 实现的功能: 点击删除小图标,删除当前输入框中所有内容 删除图标默认不显示,当输入框获得焦点后显示, 实现的操作: 在Edittext的DrawableRight中添加一张删除图标,作为删除功能的小图标 因为Edittext不能为图片设置点击监听事件,因此我们需要自定义Edittext在onTouchEvent方法中模拟按钮点击的操作

自定义EditText,带删除按键

带清空按键,还可左右加图片,默认的是加了清空图片. 清空内容是判断的手势点击EditText的范围. 自定义EditText代码如下: import android.content.Context; import android.graphics.drawable.Drawable; import android.text.Editable; import android.text.TextUtils; import android.text.TextWatcher; import androi

自定义EditText动态控制输入的字符数量

在开发中难免会遇到要控制字符数量的输入限制,比如用户的名字会让你输入10个字符(意思是英文可以输入10个但是汉字只可以输入5个),也许第一反应会在xml中设置EditText的长度,这种情况肯定是达不到我们的要求的.下面介绍一下自己的方法. 1.声明一个类继承InputFilter,实现filter中的方法,下面有详细的注解读者可以仔细看下 public class MyLenghtFilter implements InputFilter { int nMax=0; int keep=0; p

登录界面、AutoUtils 屏幕适配、自定义Edittext(显示密码可见和一键清空)和 TextInputLayout的使用。

登录界面: AutoUtils自动屏幕适配: AutoUtils屏幕适配使用的方法 : 1.将AutoUtils类复制到要适配的项目中: 2.在程序的入口(清单文件filter):super.onCreate(savedInstanceState);//屏幕适配,这里是以720*1280分辨率为基准的适配AutoUtils.setSize(this, false, 720, 1280); * 这里我们UI是以1920*1280分辨率做图的,并且是横屏显示:AutoUtils.setSize(th

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

总结  Android 自定义EditText输入框 带清空按钮 当用户输入字符后  EditText会自动在输入框的内部右侧出现删除按钮 重写EditText达到简化布局的效果 效果图: 继承EditText package com.example.myedittexttest; import android.content.Context; import android.graphics.Rect; import android.graphics.drawable.Drawable; imp

自定义EditText 实现带清空按钮的输入框

注:本文转载自csdn,其中实现清除功能所采用的方案比较可取. 原文如下: 项目要求:做出包含根据情况可变色的下划线,左侧有可变图标,右侧有可变删除标志的edittext,如图 记录制作过程: 第一版本: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52

初识EditText - 自定义EditText形状

EditText继承自TextView,是程序用于和用户进行交互的另一个重要控件,它允许用户在控件里输入和编辑内容,并可以在程序中对这些内容进行处理. 使用 android:hint属性来指定了一段提示性的文本,当我们输入任何内容时,这段文本就会自动消失. 不过随着输入的内容不断增多,EditText 会被不断地拉长.这时由于 EditText 的高度指定的是 wrap_content,因此它总能包含住里面的内容,但是当输入的内容过多时,界面就会变得非常难看.我们可以使用 android:max

Linux服务器一键删除文件夹SSH命令

Linux服务器管理不像Windows服务器管理那么方便,当然Linux也可以直观可视化操作,本人习惯使用SSH命令管理操作,常常会碰到网站产生 大量垃圾文件的苦恼,直接登录FTP删除的话,曾经试过删了一整天都删不完,FTP还常常断线.下面分享Linux服务器一键删除文件夹SSH命令的操作 方法: 下载Putty软件,双击打开,输入你的主机IP地址,连接类型选择SSH打开. 选择你要删除的文件夹,操作演示以网站http://www.war126.com为例,通过FTP连接到网站,可以看到网站的所

LayoutInflater作用及使用--自定义EditText,自带清除内容按钮

作用: 1.对于一个没有被载入或者想要动态载入的界面, 都需要使用inflate来载入. 2.对于一个已经载入的Activity, 就可以使用实现了这个Activiyt的的findViewById方法来获得其中的界面元素. 举例:定义了一个控件类CleanableEditText,实现在焦点变化时和输入内容发生变化时均要判断是否显示右边clean图标   后台调用自定义控件的时候需要LayoutInflater来载入(见第三段代码). 自定义控件: package com.utils; impo