Android 处理含有EditText的Activity虚拟键盘

在Android的Activity放置EditText之后,如果没有做特别的调整,每次一进入Activity,EditText都会自动取得焦点,然后弹出虚拟键盘,造成画面变得拥挤。虽然Android这样的设计是为了减少使用者点击萤幕的次数,但是并不是在所有情况下一进入Activity都需要自动弹出虚拟键盘,使用者可能只是要看资料而已(例如看聊天讯息)。

进入含有EditText的Activity时,不自动弹出虚拟键盘

解决一进入Activity就自动弹出虚拟键盘
只要在Activity的onCreate阶段,加上以下程式码即可。

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

 

或是在AndroidManifest.xml中,设定Activity的android:windowSoftInputMode属性,如下:

<activity

android:name="org.magiclen.TestActivity"

android:label="@string/app_name"

android:windowSoftInputMode="stateHidden" />

 

设定windowSoftInputMode属性为State Hidden之后,进入Activity时,EditText依然会取得焦点,但不会立刻弹出虚拟键盘,还要再点击一次EditText才会弹出键盘。问题成功解决了!

解决一弹出Dialog又再自动弹出虚拟键盘
Dialog中若有EditText,也会遇到和Activity一样,在出现Dialog的同时又再自动弹出虚拟键盘的状况。解决方法跟Activity相同,取得Dialog的Window后,使用setSoftInputMode方法来设定隐藏键盘,程式码如下:

AlertDialog dialog = new AlertDialog.Builder(this).setView(editText).create();

dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

dialog.show();

 

 

Android中点击空白处隐藏软键盘 

InputMethodManager imm= (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);   

@Override  

    public boolean onTouchEvent(MotionEvent event) {  

        // TODO Auto-generated method stub  

        if (event.getAction() == MotionEvent.ACTION_DOWN) {  

            System.out.println("down");  

            if (RegisterActivity.this.getCurrentFocus() != null) {  

                if (RegisterActivity.this.getCurrentFocus().getWindowToken() != null) {  

                    imm.hideSoftInputFromWindow(RegisterActivity.this.getCurrentFocus().getWindowToken(),  

                            InputMethodManager.HIDE_NOT_ALWAYS);  

                }  

            }  

        }  

        return super.onTouchEvent(event);  

    }  

 

你可能感兴趣的:(Activity)