美文网首页
EditText实现搜索框的几个注意点

EditText实现搜索框的几个注意点

作者: 梅林午餐肉 | 来源:发表于2017-10-16 00:59 被阅读0次
    • 搜索和删除图标
      显示可以用drawableLeft和drawableRight实现;重载onTouchEvent检测点击删除按钮的区域
        @Override
        public boolean onTouchEvent(MotionEvent event) {
            if(event.getAction() == MotionEvent.ACTION_UP) {
                int rawX = (int) event.getRawX();
                int rawY = (int) event.getRawY();
                Rect rect = new Rect();
                getGlobalVisibleRect(rect);
                rect.left = rect.right - mDeleteDrawable.getIntrinsicWidth();//mDeleteDrawable是删除图标资源
                if(rect.contains(rawX, rawY)) {
                    //点击区域(横向上)在删除按钮位置
                }
            }
            return super.onTouchEvent(event);
        }
    
    • 输入法的enter变成搜索图标
      除了setImeOptions(EditorInfo.IME_ACTION_SEARCH)以外,还需要设置单行setSingleLine(),注意这里并不是setMaxLines(1)
    • 焦点与返回键的处理
      焦点在输入框,消费掉返回键并且取消焦点,手动关闭输入法 ;
      焦点不在输入框,按返回键,交给上层处理。
      重载dispatchKeyEventPreIme可以在输入法处理返回键之前处理这个消息
    @Override
        public boolean dispatchKeyEventPreIme(KeyEvent event) {
            boolean result = hasFocus();
            if(event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
                clearFocus();
            }
            return result;
        }
    

    通过监听View.OnFocusChangeListener来得知焦点的变化

    @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if(!hasFocus) {
                closeSoftInput();
            }
        }
    

    注意用clearFocus取消焦点的时候,还要检查下是否在布局中存在搜索框之前的可以设置焦点的view,如果没有,焦点会再次设置到搜索框上导致输入法不消失。可以对搜索框的parent设置以下属性来解决这个问题

        android:focusable="true"
        android:focusableInTouchMode="true"
    

    相关文章

      网友评论

          本文标题:EditText实现搜索框的几个注意点

          本文链接:https://www.haomeiwen.com/subject/fqphuxtx.html