package com.your.company;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.EditText;
public class ClearableEditText extends EditText {
public String defaultValue = "";
final Drawable imgX =
getResources().getDrawable(android.R.drawable.presence_offline ); // X
// image
public ClearableEditText(Context context) {
super(context);
init(context);
}
/**
* @param context
* @param attrs
*/
public ClearableEditText(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
/**
* @param context
* @param attrs
* @param defStyle
*/
public ClearableEditText(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init(context);
}
private void init(Context ctx) {
// Set bounds of our X button
imgX.setBounds(0, 0, imgX.getIntrinsicWidth(),
imgX.getIntrinsicHeight());
// There may be initial text in the field, so we may need to display the
// button
manageClearButton();
this.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
ClearableEditText et = ClearableEditText.this;
// Is there an X showing?
if (et.getCompoundDrawables()[2] == null)
return false;
// Only do this for up touches
if (event.getAction() != MotionEvent.ACTION_UP)
return false;
// Is touch on our clear button?
if (event.getX() > et.getWidth() - et.getPaddingRight()
- imgX.getIntrinsicWidth()) {
et.setText("");
ClearableEditText.this.removeClearButton();
}
return false;
}
});
this.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
ClearableEditText.this.manageClearButton();
}
@Override
public void afterTextChanged(Editable arg0) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
});
}
void manageClearButton() {
if (this.getText().toString().equals(""))
removeClearButton();
else
addClearButton();
}
void addClearButton() {
this.setCompoundDrawables(this.getCompoundDrawables()[0],
this.getCompoundDrawables()[1], imgX,
this.getCompoundDrawables()[3]);
}
void removeClearButton() {
this.setCompoundDrawables(this.getCompoundDrawables()[0],
this.getCompoundDrawables()[1], null,
this.getCompoundDrawables()[3]);
}
}
分享到:
相关推荐
将会支持 Google 可能发布的手机操作系统或者应用软件,共同开发名为 Android 的开放源代码的移动 系 统。 谷歌早在 2002 年就进入了移动领域,可是由于目前的手机操作系统企业和手机企业相对封闭,提高了 行业的...
用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天通信演示代码 2个目标文件...
Java读写文本文件的示例代码 1个目标文件。 java俄罗斯方块 一个目标文件。 Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密 Java非对称加密源程序代码实例,本例中使用RSA加密技术,...
A 新增 公众号网页调试增加清除全部缓存按钮 A 新增 本地编译时使用合并编译 A 新增 WXML 面板 scopeData 校验提示 A 新增 PC 微信开发版小程序自动预览 A 新增 自动真机调试 A 新增 多帐号调试默认测试帐号 A...
也可以通过单击父文件夹的复选框来选择文件夹中的所有文件,或清除选择。 打开文件可能意味着对大多数常用文件类型使用内置查看器之一:图像,音频,视频和文本。 或者,您可以配置X-plore以使用系统应用程序...
通过单击父文件夹的复选框,也可以选择文件夹中的所有文件或清除选择。 打开文件可能意味着对最流行的文件类型使用内置查看器之一:图像,音频,视频和文本。 或者您可以将X-plore配置为使用系统应用程序打开文件,...
编辑主屏幕按钮(最大 4×6 网格) 多重/自动选择,在应用程序管理器和(根)资源管理器中对应用程序进行排序 自动备份更新的应用程序和新应用程序通知 记录项目和选项 在任务管理器和任务杀手中使用强制停止 创建多...
编辑主屏幕按钮最多4×6网格 多重/自动选择,在应用程序管理器和(根)资源管理器中对应用程序进行排序 自动备份更新的应用程序和新应用程序通知 录制项目和选项 在任务管理器和任务杀手中使用强制停止功能 ...
)✫按钮可关闭所有打开的选项卡和窗口中的“自动接受下一个HIT”复选框 ✫CAPTCHA简化功能包括:1)出现CAPTCHA时,将光标放在CAPTCHA框中; 2)如果未正确输入验证码,请从验证码文本框中清除错误答案; 3)当任何...