• [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?

      四、小图标下载

          

        (右键另存为即可。)

    结束

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

  • 相关阅读:
    noip2015运输计划
    bzoj3595 方伯伯的oj
    noip模拟赛 #3
    圆方树
    AtCoder AGC #4 Virtual Participation
    noip模拟赛 #2
    AtCoder AGC #3 Virtual Participation
    UNR #1 火车管理
    noip模拟赛
    AtCoder AGC #2 Virtual Participation
  • 原文地址:https://www.cnblogs.com/over140/p/2026812.html
Copyright © 2020-2023  润新知