0
点赞
收藏
分享

微信扫一扫

安卓开发之输入框设置默认不聚焦且实现点击输入框外部移除其聚焦

若如初梘 2022-01-20 阅读 73

1.在有EditText的布局中,可以对固定文本(比如TitleBar的大标题)设置默认聚焦,这样实现默认情况下输入框不聚焦,如下设置
android:focusable=“true”
android:focusableInTouchMode=“true”
2.此外,若要实现点击输入框外部关闭软键盘并且让输入框失去焦点,则可重写dispatchTouchEvent方法,捕捉到输入框获取到焦点后再进行相应操作
代码如下:

   /**
     * 使editText点击外部时候失去焦点
     *
     * @param ev 触屏事件
     * @return 事件是否被消费
     */
    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        if (ev.getAction() == MotionEvent.ACTION_DOWN) {
            View v = getCurrentFocus();
            if (isShouldHideInput(v, ev)) {
                //点击editText控件外部
                InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                if (imm != null) {
                    assert v != null;
                    //软键盘工具类关闭软键盘
                    KeyBoardUtil.closeKeyboard(v);
                    //使输入框失去焦点
                    if (v != null) {
                        v.clearFocus();
                    }
                }
            }
            return super.dispatchTouchEvent(ev);
        }
        // 必不可少,否则所有的组件都不会有TouchEvent了
        return getWindow().superDispatchTouchEvent(ev) || onTouchEvent(ev);
    }
  /**
     * 判断视图v是否应该隐藏输入软键盘,若v不是输入框,返回false
     *
     * @param v     视图
     * @param event 屏幕事件
     * @return 视图v是否应该隐藏输入软键盘,若v不是输入框,返回false
     */
    public boolean isShouldHideInput(View v, MotionEvent event) {
        if (v != null && (v instanceof EditText)) {
            int[] leftTop = {0, 0};
            //获取输入框当前的location位置
            v.getLocationInWindow(leftTop);
            int left = leftTop[0];
            int top = leftTop[1];
            int bottom = top + v.getHeight();
            int right = left + v.getWidth();
            return !(event.getX() > left && event.getX() < right
                    && event.getY() > top && event.getY() < bottom);
        }
        return false;
    }

参考博客:
(https://blog.csdn.net/weixin_37643855/article/details/106419440)
http://blog.sina.com.cn/s/blog_6fff321b0100w2rn.html
感谢两位大佬

举报

相关推荐

0 条评论