Android软键盘使用总结

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;
            }
        });

你可能感兴趣的:(Android软键盘使用总结)