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

2017-10-16  本文已影响0人  梅林午餐肉
    @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);
    }
@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"
上一篇 下一篇

猜你喜欢

热点阅读