Android软键盘使用总结

作者: 奔跑吧李博 | 来源:发表于2018-10-09 09:28 被阅读45次

    Edittext在平时开发中很是常见,因为只要有输入框,就可能会对Edittext进行特殊的操作,比如自动弹出软键盘,禁止自动弹出,监听输入等。

    1.Edittext禁止自动弹出软键盘

    在Edittext的父控件中添加如下属性即可,让它的父控件自动获取焦点。

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

    2.自动弹出软件盘

    让edittext自动获取焦点,弹出系统的软键盘。大家在实际使用中很可能会遇到不生效的问题,这里需要加上短时间的延时,不然不会生效。

        public static void showSoftInput(final Context context, final EditText et) {
            new Timer().schedule(new TimerTask() {
                @Override
                public void run() {
                    ((Activity) context).runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            et.setFocusable(true);
                            et.setFocusableInTouchMode(true);
                            //请求获得焦点
                            et.requestFocus();
                            //调用系统输入法
                            InputMethodManager inputManager = (InputMethodManager) et
                                    .getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
                            inputManager.showSoftInput(et, 0);
                        }
                    });
                }
            }, 100);
        }
    

    3.代码控制关闭软键盘

        public static void closeSoftInput(EditText editText,Context context) {
            InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
            if (imm.isActive()) {
                imm.hideSoftInputFromWindow(editText.getApplicationWindowToken(), 0);
            }
        }
    

    4.设置Edittext的imeOptions属性

    EditText的imeOptions属性有8种,分别是:

    • actionDone 对应 EditorInfo.IME_ACTION_DONE类型
      Enter键显示 完成
    • actionGo 对应 EditorInfo.IME_ACTION_GO 类型
      Enter键显示 前进
    • actionNext 对应 EditorInfo.IME_ACTION_NEXT 类型
      Enter键显示 下一项
    • actionNone 对应 EditorInfo.IME_ACTION_NONE 类型
      Enter键显示 无动作
    • actionPrevious 对应 EditorInfo.IME_ACTION_PREVIOUS 类型
      Enter键显示 上一项
    • actionSearch 对应 EditorInfo.IME_ACTION_SEARCH 类型
      Enter键显示 搜索
    • actionUnspecified 对应 EditorInfo.IME_ACTION_UNSPECIFIED 类型
      Enter键显示 未指定
    • actionSend 对应 EditorInfo.IME_ACTION_SEND类型
      Enter键显示 发送

    例如,监听键盘的enter键,使用对edittext设置KeyListener,通过回调的keyCode == KeyEvent.KEYCODE_ENTER判断是否点击enter键。不过这样会调用两次,一次是up事件,一次是down事件,可以再加入一个条件过滤其中一个事件。

            mEditText.setOnKeyListener(new View.OnKeyListener() {
                @Override
                public boolean onKey(View v, int keyCode, KeyEvent event) {
                    if (keyCode == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_UP) {
                        //监听到enter键抬起事件
                    }
                    return false;
                }
            });
    

    相关文章

      网友评论

      • f171bc055efd:我在网上找了一个,就不生效,加上延时就生效了😅

      本文标题:Android软键盘使用总结

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