1.说明

自定义带删除功能的EditText有两种方法,第一种是用组合视图的方法,即在一个view视图里面左侧放置一个EditText,右侧放置一个ImageView,但是这样增加了视图的层次,而且对输入内容的长度要做一定的处理。
第二种是重新定义EditText组件,增加相应的事件处理,即可达到很好的效果,效果图如下:
2.ClearEditText的JAVA类文件
/**
* @说明: 自定义带删除按钮的EditText
*
*/
public class ClearEditText extends EditText implements OnFocusChangeListener,
TextWatcher {
//EditText右侧的删除按钮
private Drawable mClearDrawable;
private boolean hasFoucs;
public ClearEditText(Context context) {
this(context, null);
}
public ClearEditText(Context context, AttributeSet attrs) {
this(context, attrs, android.R.attr.editTextStyle);
}
public ClearEditText(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
private void init() {
// 获取EditText的DrawableRight,假如没有设置我们就使用默认的图片,获取图片的顺序是左上右下(0,1,2,3,)
mClearDrawable = getCompoundDrawables()[2];
if (mClearDrawable == null) {
mClearDrawable = getResources().getDrawable(
R.drawable.edit_delete);
}
mClearDrawable.setBounds(0, 0, mClearDrawable.getIntrinsicWidth(),
mClearDrawable.getIntrinsicHeight());
// 默认设置隐藏图标
setClearIconVisible(false);
// 设置焦点改变的监听
setOnFocusChangeListener(this);
// 设置输入框里面内容发生改变的监听
addTextChangedListener(this);
}
/* @说明:isInnerWidth, isInnerHeight为ture,触摸点在删除图标之内,则视为点击了删除图标
* event.getX() 获取相对应自身左上角的X坐标
* event.getY() 获取相对应自身左上角的Y坐标
* getWidth() 获取控件的宽度
* getHeight() 获取控件的高度
* getTotalPaddingRight() 获取删除图标左边缘到控件右边缘的距离
* getPaddingRight() 获取删除图标右边缘到控件右边缘的距离
* isInnerWidth:
* getWidth() - getTotalPaddingRight() 计算删除图标左边缘到控件左边缘的距离
* getWidth() - getPaddingRight() 计算删除图标右边缘到控件左边缘的距离
* isInnerHeight:
* distance 删除图标顶部边缘到控件顶部边缘的距离
* distance + height 删除图标底部边缘到控件顶部边缘的距离
*/
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP) {
if (getCompoundDrawables()[2] != null) {
int x = (int)event.getX();
int y = (int)event.getY();
Rect rect = getCompoundDrawables()[2].getBounds();
int height = rect.height();
int distance = (getHeight() - height)/2;
boolean isInnerWidth = x > (getWidth() - getTotalPaddingRight()) && x < (getWidth() - getPaddingRight());
boolean isInnerHeight = y > distance && y <(distance + height);
if (isInnerWidth && isInnerHeight) {
this.setText("");
}
}
}
return super.onTouchEvent(event);
}
/**
* 当ClearEditText焦点发生变化的时候,
* 输入长度为零,隐藏删除图标,否则,显示删除图标
*/
@Override
public void onFocusChange(View v, boolean hasFocus) {
this.hasFoucs = hasFocus;
if (hasFocus) {
setClearIconVisible(getText().length() > 0);
} else {
setClearIconVisible(false);
}
}
protected void setClearIconVisible(boolean visible) {
Drawable right = visible ? mClearDrawable : null;
setCompoundDrawables(getCompoundDrawables()[0],
getCompoundDrawables()[1], right, getCompoundDrawables()[3]);
}
@Override
public void onTextChanged(CharSequence s, int start, int count, int after) {
if (hasFoucs) {
setClearIconVisible(s.length() > 0);
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void afterTextChanged(Editable s) {
}
}
3.引用ClearEditText的XML文件
<com.once.android_ui.selfview.ClearEditText
android:id="@+id/user_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:drawableLeft="@drawable/user_name"
android:drawablePadding="7dp"
android:hint="@string/name_tip"
android:singleLine="true"
android:textSize="17sp" >
<requestFocus />
</com.once.android_ui.selfview.ClearEditText>
附件是图片资源文件。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# android
# edittext删除
# Android带删除按钮的edittext
# Android 自定义EditText输入框带清空按钮
# Android实现带有删除按钮的EditText示例代码
# Android 带有删除按钮的EditText
# Android如何自定义EditText下划线?
# Android EditText自定义样式的方法
# Android UI设计系列之自定义EditText实现带清除功能的输入框(3)
# Android自定义EditText右侧带图片控件
# Android中自定义的dialog中的EditText无法弹出输入法解决方案
# Android如何自定义EditText光标与下划线颜色详解
# Android开发实现带清空按钮的EditText示例
# 边缘
# 自定义
# 相对应
# 很好
# 要做
# 有两种
# 即在
# 第二种
# 第一种
# 大家多多
# 为零
# 输入框
# 默认设置
# 增加了
# 之内
# 假如没有
# init
# super
# void
# editTextStyle
相关文章:
黑客入侵网站服务器的常见手法有哪些?
网站制作需要会哪些技术,建立一个网站要花费多少?
杭州银行网站设计制作流程,杭州银行怎么开通认证方式?
惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
如何批量查询域名的建站时间记录?
香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化
重庆网站制作公司哪家好,重庆中考招生办官方网站?
已有域名和空间如何快速搭建网站?
建站VPS推荐:2025年高性能服务器配置指南
如何续费美橙建站之星域名及服务?
教程网站设计制作软件,怎么创建自己的一个网站?
网站代码制作软件有哪些,如何生成自己网站的代码?
如何通过主机屋免费建站教程十分钟搭建网站?
如何快速上传自定义模板至建站之星?
如何正确选择百度移动适配建站域名?
如何在IIS中配置站点IP、端口及主机头?
英语简历制作免费网站推荐,如何将简历翻译成英文?
如何用PHP快速搭建高效网站?分步指南
如何获取PHP WAP自助建站系统源码?
如何用花生壳三步快速搭建专属网站?
c# Task.ConfigureAwait(true) 在什么场景下是必须的
如何配置IIS站点权限与局域网访问?
建站主机是什么?如何选择适合的建站主机?
如何高效搭建专业期货交易平台网站?
建站之星手机一键生成:多端自适应+小程序开发快速建站指南
如何实现建站之星域名转发设置?
如何用已有域名快速搭建网站?
网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
小自动建站系统:AI智能生成+拖拽模板,多端适配一键搭建
建站之星CMS五站合一模板配置与SEO优化指南
制作网站的过程怎么写,用凡科建站如何制作自己的网站?
如何快速搭建高效简练网站?
如何在云主机上快速搭建网站?
宝塔新建站点为何无法访问?如何排查?
建站之星后台管理如何实现高效配置?
如何安全更换建站之星模板并保留数据?
如何制作算命网站,怎么注册算命网站?
如何用IIS7快速搭建并优化网站站点?
如何基于云服务器快速搭建个人网站?
浅析上传头像示例及其注意事项
网站制作报价单模板图片,小松挖机官方网站报价?
历史网站制作软件,华为如何找回被删除的网站?
如何快速搭建安全的FTP站点?
定制建站价位费用解析与套餐推荐全攻略
,交易猫的商品怎么发布到网站上去?
网站制作员失业,怎样查看自己网站的注册者?
如何彻底删除建站之星生成的Banner?
建站之星如何取消后台验证码生成?
*请认真填写需求信息,我们会在24小时内与您取得联系。