开发者社区> 非花非雾> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

自定义带删除按钮的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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Android EditText输入框实现下拉且保存最近5个历史记录
Android EditText输入框实现下拉且保存最近5个历史记录
0 0
Android 常见对话框的简单使用(提示信息对话框、单选多选对话框、自定义对话框)
Android 常见对话框的简单使用(提示信息对话框、单选多选对话框、自定义对话框)
0 0
Android点击View显示PopupWindow,再次重复点击View关闭PopupWindow
 Android点击View显示PopupWindow,再次重复点击View关闭PopupWindow 这本身是一个看似很简单的问题,但是如果设置不当,就可能导致莫名其妙失效问题。
832 0
Android高级控件(一)——ListView绑定CheckBox实现全选,增加和删除等功能
<div class="markdown_views"> <h1 id="android高级控件一listview绑定checkbox实现全选增加和删除等功能">Android高级控件(一)——ListView绑定CheckBox实现全选,增加和删除等功能</h1> <hr> <blockquote> <p>这个控件还是挺复杂的,也是项目中应该算是比较常用的了,所以写了一
1614 0
Android 自定义EditText实现粘贴,复制,剪切的监听
package com.dwtedx.qq.view; import android.annotation.SuppressLint; import android.content.Context; import android.
800 0
EditText默认不弹出软键盘
#EditText默认不弹出软键盘#   网上关于EditText默认情况下不弹出软键盘,当手触摸到EditText,获取焦点时候,才会弹出软键盘,貌似都不能用,其实,在oncreate()方法中,加上      getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);      就能达到预期效果,至于,让EditText永远不获取焦点的方法,网上大把的,百度即可,暂时没有遇见让EditText永远不获取焦点的场景。
549 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载