13

我有一个 EditText,我正在以编程方式将焦点传递给它。但是当我这样做时,我希望键盘也显示出来(然后在 EditText 失去焦点时下降)。现在,用户必须点击 EditText 才能显示键盘——即使 EditText 已经有了焦点。

4

5 回答 5

23
<activity   android:name=".YourActivity"
            android:windowSoftInputMode="stateVisible" />

将此添加到清单文件...

于 2013-08-14T17:04:54.830 回答
19

这就是我显示键盘的方式:

EditText yourEditText= (EditText) findViewById(R.id.yourEditText);
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(yourEditText, InputMethodManager.SHOW_IMPLICIT);
于 2013-08-14T16:59:52.813 回答
7

将此设置为清单中的活动,以在屏幕包含 EditText 框时自动弹出键盘

<activity android:windowSoftInputMode="stateAlwaysVisible" ... />

要在失去焦点时隐藏键盘,请为 EditText 设置 OnFocusChangeListener 。

在 onCreate()

EditText editText = (EditText) findViewById(R.id.textbox);
OnFocusChangeListener ofcListener = new MyFocusChangeListener();
editText.setOnFocusChangeListener(ofcListener);

添加这个类

private class MyFocusChangeListener implements OnFocusChangeListener {

    public void onFocusChange(View v, boolean hasFocus){

        if(v.getId() == R.id.textbox && !hasFocus) {

            InputMethodManager imm =  (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(v.getWindowToken(), 0);

        }
    }
}
于 2013-08-14T17:05:32.120 回答
6

要显示键盘,请使用以下代码。

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.showSoftInput(et, InputMethodManager.SHOW_IMPLICIT);

要隐藏键盘,请使用下面的代码。et 是对 EditText 的引用

InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(getActivity().INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(et.getWindowToken(), 0);
于 2013-08-14T17:00:54.313 回答
0

为了基于焦点侦听器执行此操作,您应该选择:

final InputMethodManager imm =(InputMethodManager)context.getSystemService(Context.INPUT_METHOD_SERVICE);
editText.setOnFocusChangeListener(new OnFocusChangeListener() {

        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if(hasFocus){
                imm.showSoftInput(et, InputMethodManager.SHOW_IMPLICIT);
            }else{
                 imm.hideSoftInputFromWindow(et.getWindowToken(), 0);
            }
            imm.toggleSoftInput(0, 0);
        }
    });

希望这可以帮助。

问候!

于 2013-08-14T17:04:41.663 回答