EditText获取和失去焦点,软键盘的关闭,和软键盘的显示和隐藏的监听

Posted 牛皮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EditText获取和失去焦点,软键盘的关闭,和软键盘的显示和隐藏的监听相关的知识,希望对你有一定的参考价值。

软键盘显示和隐藏的监听:

注: mReplayRelativeLayout是EditText的父布局
 //监听软键盘是否显示或隐藏
        mReplayRelativeLayout.getViewTreeObserver().addOnGlobalLayoutListener(
                new ViewTreeObserver.OnGlobalLayoutListener() {
                    @Override
                    public void onGlobalLayout() {
                        Rect r = new Rect();
                        mReplayRelativeLayout.getWindowVisibleDisplayFrame(r);
                        int screenHeight = mReplayRelativeLayout.getRootView()
                                .getHeight();
                        int heightDifference = screenHeight - (r.bottom);
                        if (heightDifference > 200) {
                            //软键盘显示
// changeKeyboardHeight(heightDifference);
                        } else {
                            //软键盘隐藏

                        }
                    }

                });

点击一个控件使EditText获取焦点并弹出软键盘:
在该控件的点击事件中写以下代码:

                mEditText.setFocusable(true);
                mEditText.setFocusableInTouchMode(true);
                mEditText.requestFocus();
                mEditText.findFocus();
                InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.showSoftInput(mEditText, InputMethodManager.SHOW_FORCED);// 显示输入法

EditText的隐藏方法:

注:该方法其实是如果软键盘隐藏的状态这打开软键盘,反之着相反。

  InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);

EditText让其在刚进页面的时候不被选中(不处于焦点状态):

解决办法:

            在EditText的父布局的xml文件中把焦点占据,写一下代码:

            

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

 

注:点击EditText后使其获取焦点并弹出软件盘,推荐使用setOnTouchListener监听:

  mReplayEditText.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                mReplayEditText.setFocusable(true);
                mReplayEditText.setFocusableInTouchMode(true);
                return false;
            }

        });

 

以上是关于EditText获取和失去焦点,软键盘的关闭,和软键盘的显示和隐藏的监听的主要内容,如果未能解决你的问题,请参考以下文章

Android进入一个新页面,EditText失去焦点并禁止弹出键盘

Android实战开发篇 点击EditText以外区域,隐藏键盘,失去焦点

Android 设置系统的返回键 和软键盘获取焦点问题

Android怎么关闭EditText中的软键盘

EditText常用属性:为文本输入框指定软键盘类型和软键盘回车键图标设置

移动端web软键盘兼容问题