android 一種鍵盤不能調起的解決方法

        問題:一個頁面(附有截圖)中含有搜索框和地圖,當程序跳轉到此頁面的時候,進行自動定位並且顯示一些指定的信息,但是此時去點擊輸入框,鍵盤不會調起。一直沒找到原因,可能是當跳轉到本頁面的時候焦點不能被輸入框獲得,但是設置的監聽又能夠執行,想不明白。

嘗試解決方案,監聽輸入框,人爲調起鍵盤,方案一:封裝方法 

KeyBoardUtil.showKeyBoard(Activity);
	/**
	 * 顯示鍵盤
	 * @param activity
	 */
	public static void showKeyBoard(Activity activity) {
		try {
			InputMethodManager imm = (InputMethodManager)activity.getSystemService(Context.INPUT_METHOD_SERVICE);
			if (imm != null) {
				View view = activity.getCurrentFocus();
				if (view != null) {
					imm.showSoftInputFromInputMethod(view.getWindowToken(), 0);
					imm.toggleSoftInputFromWindow(view.getWindowToken(), 0, InputMethodManager.HIDE_NOT_ALWAYS);
				}
			}
			
		} catch (Exception e) {
		}
	}
這個方法只能在第一次進入該界面的時候鍵盤調起,當跳轉到別的界面再回來的時候鍵盤又不能夠正常調起。

修改方案監聽程序裏直接使用如下方法:

InputMethodManager imm = (InputMethodManager)NearVenueActivity.this.getSystemService(Context.INPUT_METHOD_SERVICE);
 imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);

這次是每次都能調起,但是出現鍵盤閃爍的情況,原因可能是鍵盤被重複調起,系統調起一次認爲又調起一次。

最後找到解決方案:

		/**
		 * 解決鍵盤不能調起的問題
		 */
		etSearchVenue.setOnTouchListener(new OnTouchListener() {
			@Override
			public boolean onTouch(View v, MotionEvent event) {
				WindowManager.LayoutParams params = getWindow().getAttributes();
				 if (event.getAction() == MotionEvent.ACTION_UP && 
						 params.softInputMode != WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE) {
					 InputMethodManager imm = (InputMethodManager)NearVenueActivity.this.getSystemService(Context.INPUT_METHOD_SERVICE);
					 imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
				}
				return true;
			}
		
		});

成功搞定這種情況下的鍵盤不能調起的問題,但是原因不明








發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章