在做这个小的控件的时候,其实我知道网上已经有很多了,但是还是想照自己的思路,亲手写下,功能很简单;
就是
(1)在EditText没有输入内容的时候隐藏删除按钮
(2 )在输入内容的使用显示删除按钮
(3 )在点击删除按钮的时候 ,如果是点击的话删除一个字符,如果是长按的话按照一定的速度一个一个删除,删除每一个字符以后光标必须在最后
看下效果图:
基本上就这几点,实现起来很简单,我没有通过Extends EditText 来实现,使用的是布局。
要注意的是
(1)长按删除的时候要在onLongClick中发送删除的msg,然后开始删除,知道按钮的执行了onkeyUp的时候删除msg,这个是通过Handler来实现的。
(2)imageButton必须要获取到焦点,如果没有焦点点击没有反应
然后就是代码了:
public class HuahuaDelectEdit extends LinearLayout implements OnClickListener,OnLongClickListener{
private Context mContext;
private LayoutInflater mLayoutInflater;
private EditText mEditText;
private ImageButton mImageButton;
private static final long DELECTPRETIME = 500;
private AttributeSet mAttributeSet;
private String mTitle;
private Handler mHandler = new Handler(){
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case 1:
delect();
mHandler.sendEmptyMessageDelayed(1, DELECTPRETIME);
break;
default:
break;
}
};
};
public HuahuaDelectEdit(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
this.mAttributeSet =attrs;
this.mContext = context;
initView();
}
public HuahuaDelectEdit(Context context, AttributeSet attrs) {
super(context, attrs);
this.mAttributeSet =attrs;
this.mContext = context;
initView();
}
public HuahuaDelectEdit(Context context) {
super(context);
this.mContext = context;
initView();
}
public void initView() {
TypedArray a = mContext.obtainStyledAttributes(mAttributeSet, R.styleable.delectedit);
mTitle = a.getString(R.styleable.delectedit_title);
mLayoutInflater = LayoutInflater.from(mContext);
View view = mLayoutInflater.inflate(R.layout.item_delect_edit, this);
mEditText = (EditText)view.findViewById(R.id.et_text);
mImageButton = (ImageButton)view.findViewById(R.id.ib_delect);
setHint(mTitle);
mEditText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void afterTextChanged(Editable s) {
setDelectShow();
}
});
mImageButton.setOnClickListener(this);
mImageButton.setOnLongClickListener(this);
mImageButton.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_UP:
Log.e("ACTION_UP", "UP");
mHandler.removeMessages(1);;
break;
default:
break;
}
return false;
}
});
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.ib_delect:
// mEditText.setText("");
delect();
break;
default:
break;
}
}
public void setDelectShow(){
if (mEditText.getText().toString().length() != 0) {
mImageButton.setVisibility(View.VISIBLE);
}else {
mImageButton.setVisibility(View.GONE);
}
}
@Override
public boolean onLongClick(View v) {
Log.e("长点击", "点击点击点击");
mHandler.sendEmptyMessage(1);
return false;
}
public void delect(){
if (mEditText.getText().toString().length() == 0) {
mHandler.removeMessages(1);;
return;
}
mEditText.setText(mEditText.getText().subSequence(0, mEditText.getText().toString().length()-1));
Editable etext = mEditText.getText();
Selection.setSelection(etext, etext.length());
}
public String getText(){
return mEditText.getText().toString();
}
public void setHint(String hint){
mEditText.setHint(hint);
}
}