想要使用android自带的editText的drawable实现右边取消按钮的设置,但是设置之后,drawableRight并没有点击事件,因此本文在继承editText的基础上增加 setClearDrawMode属性,可以直接在layout的xml文件中配置

实现上述功能,第一步在values下新建 attrs.xml文件

<?xml version="1.0" encoding="utf-8"?>                                                                                    

第二步新建UpEditText 继承EditText类

public class UpEditText extends AppCompatEditText {    //setCompoundDrawable() 0 left, 1 top, 2 right, 3 bottom    private static int LEFT = 0;    private static int RIGHT= 2;    private Context context;    //EditText的显示模式 0 从不显示,1 当编辑的时候显示    private ClearDrawMode clearDrawMode;    private int picId = R.drawable.cancel;    public UpEditText(Context context) {        super(context);        init(context, null, 0);    }    public UpEditText(Context context, AttributeSet attrs) {        super(context, attrs);        init(context, attrs, 0);    }    public UpEditText(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);        init(context, attrs, defStyleAttr);    }    private void init(Context context, AttributeSet attributeSet,int defStyleAttr){        this.context = context;        TypedArray typedArray = context.obtainStyledAttributes(attributeSet, R.styleable.UpEditText);        int attr = typedArray.getInteger(R.styleable.UpEditText_clearDrawMode,picId);        typedArray.recycle();        switch (attr){            case 1:                clearDrawMode = ClearDrawMode.WHILEEDITING;                break;            default:                clearDrawMode = ClearDrawMode.NEVER;                break;        }        this.setCompoundDrawables(null,null,null,null);    }    public enum ClearDrawMode{        NEVER, WHILEEDITING    }    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        canvas.save();        buttonManager();        canvas.restore();    }    public void buttonManager(){        switch (clearDrawMode){            case WHILEEDITING:                if(hasFocus() && getText().length() > 0){                    Drawable drawPicRight = getResources().getDrawable(R.drawable.cancel,null);                    drawPicRight.setBounds(1,1,60,60);                    this.setCompoundDrawables(null,null,drawPicRight,null);                }else if(getText().length() == 0){                    this.setCompoundDrawables(null,null,null,null);                }                break;            default:                this.setCompoundDrawables(null,null,null,null);                break;        }    }    @Override    public boolean onTouchEvent(MotionEvent event) {        switch (event.getAction()){            case MotionEvent.ACTION_UP:                Drawable drawableRight = this.getCompoundDrawables()[RIGHT];                if (drawableRight != null && event.getRawX() >= (this.getRight() - (drawableRight.getBounds().width()) - getPaddingRight())){                    this.setText(null);                    this.setCompoundDrawables(null,null,null,null);                }                break;        }        return super.onTouchEvent(event);    }    public void setClearDrawMode(ClearDrawMode clearDrawMode) {        this.clearDrawMode = clearDrawMode;    }    public void setPicId(int picId) {        this.picId = picId;    }}

第三步,在activity的布局文件里

设置如下图所示  第一个画红色线的是布局文件里需要的,下面两个是给自定义的UpEditText定义自己增加取消按钮的属性值

然后再activity中添加代码

搞定

参考别人代码:

https://github.com/opprime/EditTextField(该代码是基于以前老的sdk写的)

 

更多相关文章

  1. 真实可行的android 基站定位代码
  2. Android个版本适配之7.0
  3. android如何对应用进行单元测试
  4. React Native 运行android程序报SDK文件不存在错误
  5. Android之路之十一(SharedPreferences&SQLite数据库)
  6. Android(安卓)中的TabHost控件的使用
  7. android文件系统挂载分析(1)---正常开机挂载
  8. Android反编译工具绿色版V2.0(改进版)
  9. Android之实现滑动开关组件

随机推荐

  1. Android(安卓)API Guides---Environment
  2. 调用Android自带日历功能
  3. 在android中使用MVP模式
  4. [Android]如何做一个崩溃率少于千分之三
  5. Android(安卓)广播接收器学习之监听网络
  6. android 为桌面图标添加数字角标
  7. Android(安卓)辅助功能服务Accessibility
  8. Android开发--事件的处理/按键按下,弹起,触
  9. Android(安卓)缓存浅谈(一) LruCache
  10. 远程登录android手机