Android 自定义EditText输入框 带清空按钮
总结 Android 自定义EditText输入框 带清空按钮
当用户输入字符后 EditText会自动在输入框的内部右侧出现删除按钮
重写EditText达到简化布局的效果
效果图:
继承EditText
package com.example.myedittexttest; import android.content.Context; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.text.Editable; import android.text.TextWatcher; import android.util.AttributeSet; 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() { // 对文本内容改变进行监听 @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"
设置光标的颜色 设置@null 表示光标的颜色和输入框的字体颜色相同
android:textCursorDrawable="@null"
显示隐藏光标
android:cursorVisible="true"//显示 android:cursorVisible="false"//隐藏
有误的地方请指正
每日精进
最后神兽镇楼
//┏┓ ┏┓ //┏┛┻━━━┛┻┓ //┃ ┃ //┃ ━ ┃ //┃ ┳┛ ┗┳ ┃ //┃ ┃ //┃ ┻ ┃ //┃ ┃ //┗━┓ ┏━┛ // ┃ ┃ 神兽保佑 // ┃ ┃ 代码无BUG! // ┃ ┗━━━┓ // ┃ ┣┓ // ┃ ┏┛ // ┗┓┓┏━┳┓┏┛ // ┃┫┫ ┃┫┫ // ┗┻┛ ┗┻┛
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。