android edittext 右边按钮,Android 自定义EditText, 增加设置右边取消按钮的属性

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

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

e401fb395851516a2034c5c406eddb15.png

第二步新建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定义自己增加取消按钮的属性值

73ae4527c21d7c1f9d0f11399b38f2b2.png

然后再activity中添加代码

40df9b76f755b7ba7c580432baf1587b.png

搞定

参考别人代码:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值