自定义带删除按钮的EditText

在做这个小的控件的时候,其实我知道网上已经有很多了,但是还是想照自己的思路,亲手写下,功能很简单;

就是

   (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);
	}
}

Demo:http://download.csdn.net/detail/u012808234/9084707

时间: 2024-09-25 20:21:14

自定义带删除按钮的EditText的相关文章

Android实现自定义带删除功能的EditText实例

1.说明 自定义带删除功能的EditText有两种方法,第一种是用组合视图的方法,即在一个view视图里面左侧放置一个EditText,右侧放置一个ImageView,但是这样增加了视图的层次,而且对输入内容的长度要做一定的处理. 第二种是重新定义EditText组件,增加相应的事件处理,即可达到很好的效果,效果图如下: 2.ClearEditText的JAVA类文件 /** * @说明: 自定义带删除按钮的EditText * */ public class ClearEditText ext

Android实现带有删除按钮的EditText示例代码_Android

一.首先来看看效果 这是一个带有删除按钮的输入文本框, 需要新建一个类继承自EditText, 先把代码贴出来, 然后在解释: 示例代码如下: public class EditTextWithDel extends EditText { private final static String TAG = "EditTextWithDel"; private Drawable imgInable; private Context mContext; public EditTextWit

Android 带有删除按钮的EditText

MainActivity如下: package cc.textview5; import android.os.Bundle; import android.text.TextUtils; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; import android.app.Activity;

javascript动态增加文本输入框并带删除按钮代码

<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <html xmlns="http://www.111cn.net/1999/xhtml"> <head> <meta http-equiv="conte

Android自定义View示例(一)—带有删除按钮的EditText

MainActivity如下: package cc.textview5; import android.os.Bundle; import android.text.TextUtils; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; import android.app.Activity;

Android实现带有删除按钮的EditText示例代码

一.首先来看看效果 这是一个带有删除按钮的输入文本框, 需要新建一个类继承自EditText, 先把代码贴出来, 然后在解释: 示例代码如下: public class EditTextWithDel extends EditText { private final static String TAG = "EditTextWithDel"; private Drawable imgInable; private Context mContext; public EditTextWit

Android 带有删除按钮的EditText_Android

MainActivity如下: package cc.textview5; import android.os.Bundle; import android.text.TextUtils; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; import android.app.Activity;

Android 自定义EditText输入框带清空按钮

Android 自定义EditText输入框带清空按钮 当用户输入字符后 EditText会自动在输入框的内部右侧出现删除按钮 重写EditText达到简化布局的效果 效果图: 继承EditText package com.example.myedittexttest; import android.content.Context; import android.graphics.Rect; import android.graphics.drawable.Drawable; import an

asp.net-ASP.NET,GridView自带的删除按钮无效

问题描述 ASP.NET,GridView自带的删除按钮无效 我的gridview中的数据是从两张表T1,T2里面调出来的,但是我只要删除T1里面的内容. SqlDataSouce代码如下: ConnectionString="" DeleteCommand="DELETE FROM paper WHERE paper_id = @original_paper_id AND question_num = @original_question_num" SelectC