[Android]文本框实现搜索和清空效果

前言

  本文实现的效果:文本框输入为空时显示输入的图标;不为空时显示清空的图标,此时点击清空图标能清空文本框内输入文字。

 

声明

  欢迎转载,但请保留文章原始出处:) 

    博客园:http://www.cnblogs.com

    农民伯伯: http://over140.cnblogs.com 

 

正文

  一、实现效果

    

       

 

  二、实现代码 

    监听输入

    /**
     * 动态搜索
     */
    private TextWatcher tbxSearch_TextChanged = new TextWatcher() {

        //缓存上一次文本框内是否为空
        private boolean isnull = true;

        @Override
        public void afterTextChanged(Editable s) {
            if (TextUtils.isEmpty(s)) {
                if (!isnull) {
                    mSearchView.setCompoundDrawablesWithIntrinsicBounds(null,
                            null, mIconSearchDefault, null);
                    isnull = true;
                }
            } else {
                if (isnull) {
                    mSearchView.setCompoundDrawablesWithIntrinsicBounds(null,
                            null, mIconSearchClear, null);
                    isnull = false;
                }
            }
        }

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

        /**
         * 随着文本框内容改变动态改变列表内容
         */
        @Override
        public void onTextChanged(CharSequence s, int start, int before,
                int count) {
            
        }
    };

     触摸事件

    private OnTouchListener txtSearch_OnTouch = new OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            switch (event.getAction()) {
            case MotionEvent.ACTION_UP:
                int curX = (int) event.getX();
                if (curX > v.getWidth() - 38
                        && !TextUtils.isEmpty(mSearchView.getText())) {
                    mSearchView.setText("");
                    int cacheInputType = mSearchView.getInputType();// backup  the input type
                    mSearchView.setInputType(InputType.TYPE_NULL);// disable soft input
                    mSearchView.onTouchEvent(event);// call native handler
                    mSearchView.setInputType(cacheInputType);// restore input  type
                    return true;// consume touch even
                }
                break;
            }
            return false;
        }
    };

    绑定事件

    private Drawable mIconSearchDefault; // 搜索文本框默认图标
    private Drawable mIconSearchClear; // 搜索文本框清除文本内容图标

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main)
        
        final Resources res = getResources();
        mIconSearchDefault = res.getDrawable(R.drawable.txt_search_default);
        mIconSearchClear = res.getDrawable(R.drawable.txt_search_clear);
        
        mSearchView = (EditText) findViewById(R.id.txtSearch);
        mSearchView.addTextChangedListener(tbxSearch_TextChanged);
        mSearchView.setOnTouchListener(txtSearch_OnTouch);
    }

    代码说明:

      1. 为输入框绑定触摸事件(模拟点击事件捕捉)。通过监听点击区域判断是否点击清空图片,如果在该区域并且文本框不为空,则清空文本框。

      2. 为输入框绑定文本改变事件监听,根据内容改变动态设置图标显示。

      3. 维持清空操作后软键盘状态。

 

  三、参考

    1.  how to block virtual keyboard while clicking on edittext in android?

 

  四、小图标下载

      

    (右键另存为即可。)

 

结束 

  活用好每一个控件的属性、方法和事件能实现很多有意思的效果。欢迎大家交流。

转载:http://www.cnblogs.com/over140/archive/2011/04/25/2026812.html

时间: 2024-10-31 02:15:30

[Android]文本框实现搜索和清空效果的相关文章

Android 编程中文本框中搜索和清空效果实现

  正文 一.实现效果 二.实现代码 监听输入 /** * 动态搜索 */ private TextWatcher tbxSearch_TextChanged = new TextWatcher() { //缓存上一次文本框内是否为空 private boolean isnull = true; @Override public void afterTextChanged(Editable s) { if (TextUtils.isEmpty(s)) { if (!isnull) { mSear

js文本框输入内容智能提示效果_javascript技巧

本文实例讲述了js文本框输入内容智能提示效果代码.分享给大家供大家参考.具体如下: 运行效果截图如下: 大体思路: 1.监听文本框事件.这里是用的keyup事件.大家可以尝试用onchange事件.不过感觉keyup事件的效果要好一点. 2.根据输入内容通过ajax异步的方式去访问后台数据. 3.遍历返回数据将数据添加到显示区域. 4.在添加数据的同时给每一条数据加上一些效果,点击其中一条将数据填到文本框,并且提示内容消失. 5.后台数据应该拼接成json格式. 具体代码如下: <!DOCTYP

我在页面上有五个文本框,我想在输完最后一个文本框的内容以后,回车以后将五个文本框的内容都清空,并将焦点回到第一个文本框处

问题描述 我在页面上有五个文本框,我想在输完最后一个文本框的内容以后,回车以后将五个文本框的内容都清空,并将焦点回到第一个文本框处.该如何实现,请大家指教!我试了一下大虾们以前解答的帖子,document.formname.inputname.value="",它报错是"未声明名称'document'",请问我该如何声明呢?我用的是VS2005环境 解决方案 解决方案二:,document.formname.inputname.value=""是

Android文本框搜索和清空效果实现代码及简要概述_Android

前言 本文实现的效果:文本框输入为空时显示输入的图标;不为空时显示清空的图标,此时点击清空图标能清空文本框内输入文字. 正文 一.实现效果 二.实现代码 绑定事件 复制代码 代码如下: private Drawable mIconSearchDefault; // 搜索文本框默认图标 private Drawable mIconSearchClear; // 搜索文本框清除文本内容图标 @Override protected void onCreate(Bundle savedInstanceS

js实现仿Discuz文本框弹出层效果_javascript技巧

本文实例讲述了js实现仿Discuz文本框弹出层效果.分享给大家供大家参考.具体如下: 这是一个在经典论坛曾经热讨论的问题,记得在QQ邮箱里也有类似功能,Discuz7.0论坛里同样也有,当你的鼠标单击文本框的时候,会弹出一个包含文字.图片.表单无素的DIV层,里面的元素都可以进行操作,很方便,选中的值会自动添加到文本框内.本代码经过了多次修正,没有进行过多美化,你美工好的话可以自己美化. 运行效果截图如下: 具体代码如下: <!DOCTYPE html PUBLIC "-//W3C//D

Android自动文本框输入识别提示功能代码_Android

自动提示文本框(AutoCompleteTextView)可以加强用户体验,缩短用户的输入时间(百度的搜索框就是这个效果). 相信大家都熟悉自动识别提示吧,在我们的生活中随处可见,今天就让我为大家简单介绍一下它是如何设计的. 所谓自动识别输入即是根据用户输入的已有信息,为用户提示可能的值,方便用户完成输入.在Android设备上这种功能分为:AutoCompleteTextView和MultiAutoCompleteTextView,前者为单个的自动识别,类似与搜索引擎的输入框提示:后者为多个值

jQuery实现的选择商品飞入文本框动画效果完整实例_jquery

本文实例讲述了jQuery实现的选择商品飞入文本框动画效果.分享给大家供大家参考,具体如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml">

word2007向文本框添加填充或效果

  您可以更改文本框 (文本框:一种可移动.可调大小的文字或图形容器.使用文本框,可以在一页上放置数个文字块,或使文字按与文档中其他文字不同的方向排列.)的外观,方法是更改它的填充或向其添加各种效果,例如阴影.发光.映像.柔化边缘.棱台和三维 (3-D) 旋转. 本文内容 ●填充.渐变和效果概述 ●添加或更改文本框填充 ●添加或更改文本框效果 ●删除文本框填充 ●删除文本框效果 填充.渐变和效果概述 填充是指文本框的内饰.更改文本框的填充颜色时,还可以向填充中添加纹理.图片或渐变.渐变是指颜色和

根据条件模糊查询完之后怎么清空文本框?

问题描述 点击右面红色菜单 之后 出现 右面,然后在文本框输入值进行模糊查询,查询完成之后,再点击右边的红色菜单,右边页面依然还是模糊查询之后的数据,不是全部的数据的.如何解决? 问题补充:还有就是 我在javascript 里面把文本框的值 给清空了,但是查看源码的时候还是可以看到值,document.getElementById('d1').value=''; <body onload="on_load()"> 这样清空的,这是不是像第一位回答者说的那样的查询条件放入s