码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-01-27 10:50:51      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:

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

 

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

标签:

原文地址:http://www.cnblogs.com/rh1910362960/p/4252043.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!