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"//隐藏
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# Android
# EditText清空按钮
# EditText清空
# Android自定义view实现TextView方形输入框
# Android 实现带头部文字输入框的自定义控件
# Android自定义view实现输入框效果
# Android View教程之自定义验证码输入框效果
# Android自定义控件通用验证码输入框的实现
# Android 自定义密码输入框实现代码
# Android 详解自定义圆角输入框和按钮的实现流程
# 输入框
# 清空
# 希望能
# 自定义
# 重写
# 谢谢大家
# edittext
# paramInt
# int
# void
# setEditTextDrawable
# addTextChangedListener
# Override
# paramAttributeSet
# dRight
# TAG
# String
# rBounds
# initEditText
# super
相关文章:
北京营销型网站制作公司,可以用python做一个营销推广网站吗?
XML的“混合内容”是什么 怎么用DTD或XSD定义
C++中引用和指针有什么区别?(代码说明)
如何打造高效商业网站?建站目的决定转化率
常州企业建站如何选择最佳模板?
制作旅游网站html,怎样注册旅游网站?
网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?
建站org新手必看:2024最新搭建流程与模板选择技巧
C#如何在一个XML文件中查找并替换文本内容
高端建站如何打造兼具美学与转化的品牌官网?
如何通过宝塔面板实现本地网站访问?
学校建站服务器如何选型才能满足性能需求?
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
制作网站公司那家好,网络公司是做什么的?
公众号网站制作网页,微信公众号怎么制作?
购物网站制作公司有哪些,哪个购物网站比较好?
如何配置IIS站点权限与局域网访问?
宝塔建站后网页无法访问如何解决?
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
制作网站外包平台,自动化接单网站有哪些?
平台云上自主建站:模板化设计与智能工具打造高效网站
C++如何将C风格字符串(char*)转换为std::string?(代码示例)
网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?
在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?
网站制作知乎推荐,想做自己的网站用什么工具比较好?
专业公司网站制作公司,用什么语言做企业网站比较好?
c++23 std::expected怎么用 c++优雅处理函数错误返回【详解】
网站制作服务平台,有什么网站可以发布本地服务信息?
如何通过VPS建站实现广告与增值服务盈利?
建站主机功能解析:服务器选择与快速搭建指南
网站专业制作公司有哪些,做一个公司网站要多少钱?
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
如何实现建站之星域名转发设置?
海南网站制作公司有哪些,海口网是哪家的?
自助网站制作软件,个人如何自助建网站?
建站中国官网:模板定制+SEO优化+建站流程一站式指南
如何通过商城免费建站系统源码自定义网站主题?
如何零基础开发自助建站系统?完整教程解析
,如何利用word制作宣传手册?
七夕网站制作视频,七夕大促活动怎么报名?
,柠檬视频怎样兑换vip?
免费公司网站制作软件,如何申请免费主页空间做自己的网站?
实惠建站价格推荐:2025年高性价比自助建站套餐解析
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
,巨量百应是干嘛的?
代刷网站制作软件,别人代刷火车票靠谱吗?
如何通过NAT技术实现内网高效建站?
独立制作一个网站多少钱,建立网站需要花多少钱?
电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?
智能起名网站制作软件有哪些,制作logo的软件?
*请认真填写需求信息,我们会在24小时内与您取得联系。