设为首页 加入收藏

TOP

Android实现仿IOS带清空功能的文本输入框
2014-11-24 07:17:47 来源: 作者: 【 】 浏览:1
Tags:Android 实现 IOS 清空 功能 文本 输入

/**
* @类名:ClearableEditText
* @功能描述:
* @作者: William Xu
* @创建日期:2013-4-13
* @修改人:
* @修改日期:
* @修改备注:
* @版本号:1.0
*/
public class ClearableEditText extends EditText implements
OnFocusChangeListener, TextWatcher {


private Drawable xD;


public ClearableEditText(Context context) {
super(context);
init();
}


public ClearableEditText(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}


public ClearableEditText(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}


private void init() {
xD = getCompoundDrawables()[2];
if (xD == null) {
xD = getResources()
.getDrawable(R.drawable.search_clear);
}
xD.setBounds(0, 0, xD.getIntrinsicWidth(), xD.getIntrinsicHeight());
setClearIconVisible(false);
super.setOnFocusChangeListener(this);
addTextChangedListener(this);
}



@Override
public void setOnFocusChangeListener(OnFocusChangeListener f) {
this.f = f;
}


private OnFocusChangeListener f;


@Override
public boolean onTouchEvent(MotionEvent event) {
if (getCompoundDrawables()[2] != null) {
if (event.getAction() == MotionEvent.ACTION_UP) {
boolean tappedX = event.getX() > (getWidth()
- getPaddingRight() - xD.getIntrinsicWidth());
if (tappedX) {
setText("");


event.setAction(MotionEvent.ACTION_CANCEL);


}
}
}


return super.onTouchEvent(event);
}


@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
setClearIconVisible(getText().length() > 0);
} else {
setClearIconVisible(false);
}
if (f != null) {
f.onFocusChange(v, hasFocus);
}
}



protected void setClearIconVisible(boolean visible) {
Drawable x = visible xD : null;
setCompoundDrawables(getCompoundDrawables()[0],
getCompoundDrawables()[1], x, getCompoundDrawables()[3]);
}


@Override
public void onTextChanged(CharSequence s, int start, int count,
int after) {
setClearIconVisible(s.length() > 0);
}


@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub


}


@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub


}



}


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Linux/Unix shell 脚本监控磁盘可.. 下一篇双边滤波Matlab实现<The Bilat..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·数据库:推荐几款 Re (2025-12-25 12:17:11)
·如何最简单、通俗地 (2025-12-25 12:17:09)
·什么是Redis?为什么 (2025-12-25 12:17:06)
·对于一个想入坑Linux (2025-12-25 11:49:07)
·Linux 怎么读? (2025-12-25 11:49:04)