首页 > 代码库 > Android 处理含有EditText的Activity虚拟键盘

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属性,如下:

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

 

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