写点什么

Android 自定义 EditText 输入框 带清空按钮,androidview 的事件分发

作者:嘟嘟侠客
  • 2021 年 11 月 27 日
  • 本文字数:2071 字

    阅读完需:约 7 分钟

import android.view.MotionEvent;


import android.widget.EditText;


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() { // 对文本内容改变


《Android 学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享


进行监听


@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" >


<com.example.myedittexttest.MyEditText


android:id="@+id/edit_text"


android:layout_width="fill_parent"


android:layout_height="50dp"


android:layout_marginTop="50dp"


android:background="#88aaff"


android:drawableRight="@drawable/edit_clear"


android:textCursorDrawable="@null" />


<Button


android:id="@+id/button1"


android:layout_width="wrap_content"


android:layout_height="wrap_content"


android:layout_below="@+id/edit_text"


android:layout_marginTop="84dp"


android:layout_toRightOf="@+id/textView1"


android:text="Button" />


</RelativeLayout>


XML 中的属性简介:


显示右侧的 X 按钮:


android:drawableRight="@drawable/edit_clear"

总结

Android 架构学习进阶是一条漫长而艰苦的道路,不能靠一时激情,更不是熬几天几夜就能学好的,必须养成平时努力学习的习惯。所以:贵在坚持!


上面分享的字节跳动公司 2021 年的面试真题解析大全,笔者还把一线互联网企业主流面试技术要点整理成了视频和 PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。



【Android 高级架构视频学习资源】


Android 部分精讲视频领取学习后更加是如虎添翼!进军 BATJ 大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务 Curd 而已!现如今市场上初级程序员泛滥,这套教程针对 Android 开发工程师 1-6 年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶 Android 中高级、架构师对你更是如鱼得水,赶快领取吧!


本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

用户头像

嘟嘟侠客

关注

还未添加个人签名 2021.03.19 加入

还未添加个人简介

评论

发布
暂无评论
Android 自定义EditText输入框 带清空按钮,androidview的事件分发