`
ericbaner
  • 浏览: 172570 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【代码】Android带清除按钮的文本编辑框

 
阅读更多

package com.your.company;

import android.content.Context;
import android.graphics.drawable.Drawable;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.EditText;

public class ClearableEditText extends EditText {

	public String defaultValue = "";
	final Drawable imgX =
	getResources().getDrawable(android.R.drawable.presence_offline ); // X
	// image
	

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

	/**
	 * @param context
	 * @param attrs
	 */
	public ClearableEditText(Context context, AttributeSet attrs) {
		super(context, attrs);
		init(context);
	}

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

	private void init(Context ctx) {
		// Set bounds of our X button
		imgX.setBounds(0, 0, imgX.getIntrinsicWidth(),
				imgX.getIntrinsicHeight());

		// There may be initial text in the field, so we may need to display the
		// button
		manageClearButton();

		this.setOnTouchListener(new OnTouchListener() {
			@Override
			public boolean onTouch(View v, MotionEvent event) {

				ClearableEditText et = ClearableEditText.this;

				// Is there an X showing?
				if (et.getCompoundDrawables()[2] == null)
					return false;
				// Only do this for up touches
				if (event.getAction() != MotionEvent.ACTION_UP)
					return false;
				// Is touch on our clear button?
				if (event.getX() > et.getWidth() - et.getPaddingRight()
						- imgX.getIntrinsicWidth()) {
					et.setText("");
					ClearableEditText.this.removeClearButton();
				}
				return false;
			}

		});

		this.addTextChangedListener(new TextWatcher() {
			@Override
			public void onTextChanged(CharSequence s, int start, int before,
					int count) {

				ClearableEditText.this.manageClearButton();
			}

			@Override
			public void afterTextChanged(Editable arg0) {
			}

			@Override
			public void beforeTextChanged(CharSequence s, int start, int count,
					int after) {
			}
		});
	}

	void manageClearButton() {
		if (this.getText().toString().equals(""))
			removeClearButton();
		else
			addClearButton();
	}

	void addClearButton() {
		this.setCompoundDrawables(this.getCompoundDrawables()[0],
				this.getCompoundDrawables()[1], imgX,
				this.getCompoundDrawables()[3]);
	}

	void removeClearButton() {
		this.setCompoundDrawables(this.getCompoundDrawables()[0],
				this.getCompoundDrawables()[1], null,
				this.getCompoundDrawables()[3]);
	}

}
 
分享到:
评论

相关推荐

    新版Android开发教程.rar

    将会支持 Google 可能发布的手机操作系统或者应用软件,共同开发名为 Android 的开放源代码的移动 系 统。 谷歌早在 2002 年就进入了移动领域,可是由于目前的手机操作系统企业和手机企业相对封闭,提高了 行业的...

    JAVA上百实例源码以及开源项目源代码

    用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天通信演示代码 2个目标文件...

    JAVA上百实例源码以及开源项目

    Java读写文本文件的示例代码 1个目标文件。 java俄罗斯方块 一个目标文件。 Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密  Java非对称加密源程序代码实例,本例中使用RSA加密技术,...

    【最新版】wechat_devtools_1.02.2004020.dmg【亲测可用】最好的微信开发者工具

    A 新增 公众号网页调试增加清除全部缓存按钮 A 新增 本地编译时使用合并编译 A 新增 WXML 面板 scopeData 校验提示 A 新增 PC 微信开发版小程序自动预览 A 新增 自动真机调试 A 新增 多帐号调试默认测试帐号 A...

    X-Plore_File_Manager_Donate_v4.18.12.apk

    也可以通过单击父文件夹的复选框来选择文件夹中的所有文件,或清除选择。 打开文件可能意味着对大多数常用文件类型使用内置查看器之一:图像,音频,视频和文本。 或者,您可以配置X-plore以使用系统应用程序...

    X-Plore File Manager Pro 4.14.01.apk

    通过单击父文件夹的复选框,也可以选择文件夹中的所有文件或清除选择。 打开文件可能意味着对最流行的文件类型使用内置查看器之一:图像,音频,视频和文本。 或者您可以将X-plore配置为使用系统应用程序打开文件,...

    3C 多合一工具箱 3C All-in-One Toolbox 2.4.9b 中文多语免费版.zip

    编辑主屏幕按钮(最大 4×6 网格) 多重/自动选择,在应用程序管理器和(根)资源管理器中对应用程序进行排序 自动备份更新的应用程序和新应用程序通知 记录项目和选项 在任务管理器和任务杀手中使用强制停止 创建多...

    3C_All-in-One_Toolbox_Pro_v2.2e.apk

    编辑主屏幕按钮最多4×6网格 多重/自动选择,在应用程序管理器和(根)资源管理器中对应用程序进行排序 自动备份更新的应用程序和新应用程序通知 录制项目和选项 在任务管理器和任务杀手中使用强制停止功能 ...

    亚马逊机械土耳其工具「Tools for Amazon's Mechanical Turk」-crx插件

    )✫按钮可关闭所有打开的选项卡和窗口中的“自动接受下一个HIT”复选框 ✫CAPTCHA简化功能包括:1)出现CAPTCHA时,将光标放在CAPTCHA框中; 2)如果未正确输入验证码,请从验证码文本框中清除错误答案; 3)当任何...

Global site tag (gtag.js) - Google Analytics