美文网首页
Android EditText 和软键盘常见用法

Android EditText 和软键盘常见用法

作者: yoomaz | 来源:发表于2018-10-22 15:47 被阅读19次

EditText 和软键盘常见用法

前因

产品有这样一个需求,一个输入框,刚开始进入页面的时候不获取焦点,第一次点击输入框光标到最后,后面再点击定位到具体文字,键盘收起来输入框失去焦点。

分析与实现

其实即使把 EditText 的使用方式组合起来,再监听一下软键盘的抬起,其中的一些小细节还是需要考虑的。

  • 功能一:EditText 刚进入见面的时候不获取焦点,不自动弹出键盘

    解决:在父布局 加上下面两个属性,获取焦点即可:

    android:focusable="true"
    android:focusableInTouchMode="true"
    
  • 功能二:第一次点击后光标到最后,再点击定位到具体文字

    这个稍微麻烦一点,首先关闭 EditText 的焦点:

    android:focusable="false"
    

    然后监听 EditText的点击事件:

    etLeaveWords.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (!etLeaveWords.hasFocus()) {
                        etLeaveWords.setFocusable(true);
                        etLeaveWords.setFocusableInTouchMode(true);
                        etLeaveWords.requestFocus();
                        KeyboardUtil.softShow(mContext, etLeaveWords);
                        String message = etLeaveWords.getText().toString();
                        if (!TextUtils.isEmpty(message)) {
                            etLeaveWords.setSelection(message.length());
                        }
                    }
                }
            });
    

    注意这几部是一个整体,因为 requestFocus() 后用户需要再点击一次才可以显示键盘,这里我们直接强行显示出来:

    etLeaveWords.setFocusable(true);
    etLeaveWords.setFocusableInTouchMode(true);
    etLeaveWords.requestFocus();
    KeyboardUtil.softShow(mContext, etLeaveWords); // 显示键盘
    

    至于定位,直接调用 setSelection() 方法

    至于软件盘消失,EditText 失去焦点,用的网上的一个方案:

    etLeaveWords.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
                @Override
                public void onGlobalLayout() {
                    Rect r = new Rect();
                    etLeaveWords.getWindowVisibleDisplayFrame(r);
    
                    int heightDiff = etLeaveWords.getRootView().getHeight() - (r.bottom - r.top);
                    if (heightDiff < 200) {
                      // 处理键盘隐藏
                        etLeaveWords.setFocusable(false);
                    }
                }
            });
    

相关文章

网友评论

      本文标题:Android EditText 和软键盘常见用法

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