美文网首页
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