前言:带删除按钮的搜索框,代码乃网上翻的。核心类如下。
/**
* Created by coder-pig on 2015/7/16 0016.
*/
@SuppressLint("AppCompatCustomView")
public class DelEditText extends EditText {
private Drawable imgClear;
private Context mContext;
DelEditTextChangedListener mDelEditTextChangedListener;
public DelEditText(Context context, AttributeSet attrs) {
super(context, attrs);
this.mContext = context;
init();
}
private void init() {
// imgClear =
// mContext.getResources().getDrawable(R.drawable.delete_gray);
imgClear = mContext.getResources().getDrawable(R.drawable.item_close_button);
addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
if (mDelEditTextChangedListener != null) {
mDelEditTextChangedListener.beforeTextChanged(s, start, count, after);
}
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (mDelEditTextChangedListener != null) {
mDelEditTextChangedListener.onTextChanged(s, start, before, count);
}
}
@Override
public void afterTextChanged(Editable editable) {
setDrawable();
if (mDelEditTextChangedListener != null) {
mDelEditTextChangedListener.afterTextChanged(editable);
}
}
});
}
// 绘制删除图片
private void setDrawable() {
if (length() < 1)
setCompoundDrawablesWithIntrinsicBounds(null, null, null, null);
else
setCompoundDrawablesWithIntrinsicBounds(null, null, imgClear, null);
}
// 当触摸范围在右侧时,触发删除方法,隐藏叉叉
@Override
public boolean onTouchEvent(MotionEvent event) {
if (imgClear != null && event.getAction() == MotionEvent.ACTION_UP) {
int eventX = (int) event.getRawX();
int eventY = (int) event.getRawY();
Rect rect = new Rect();
getGlobalVisibleRect(rect);
rect.left = rect.right - 100;
if (rect.contains(eventX, eventY))
setText("");
}
return super.onTouchEvent(event);
}
@Override
protected void finalize() throws Throwable {
super.finalize();
}
public interface DelEditTextChangedListener {
public void beforeTextChanged(CharSequence s, int start, int count, int after);
public void onTextChanged(CharSequence s, int start, int before, int count);
public void afterTextChanged(Editable editable);
}
public DelEditTextChangedListener getDelEditTextChangedListener() {
return mDelEditTextChangedListener;
}
public void setDelEditTextChangedListener(DelEditTextChangedListener l) {
this.mDelEditTextChangedListener = l;
}
}
使用方法:
1,在xml中引用如下:
<com.csair.appmodule.view.DelEditText
android:id="@+id/et_search"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10"
android:hint="搜索" />
2、在代码中引用如下:
private DelEditText etSearch;
etSearch = (DelEditText) findViewById(R.id.et_search);
String keyWord;//搜索关键词
etSearch.setDelEditTextChangedListener(new DelEditText.DelEditTextChangedListener() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
if (s.toString().trim().equals(keyWord)) {
return;
} else {
keyWord = s.toString().trim();
if (keyWord.isEmpty() || keyWord == null) {
showAll();
} else {
doSearch(keyWord);//搜索动作
}
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable editable) {
// TODO Auto-generated method stub
}
});
网友评论