標籤:空白地區 隱藏 軟鍵盤
歡迎使用Markdown編輯器寫部落格
很多時候,我們在使用應用時,會出現IME軟鍵盤彈出的問題,通常情況下,我們預設會使使用者點擊返回鍵或者下一步對軟鍵盤進行隱藏。為了更好的體驗,我們可以實現當使用者使用完畢軟鍵盤時。點擊空白地區即可實現隱藏的功能。效果:
代碼實現
代碼塊文法遵循標準markdown代碼,例如:
package example.com.jinlin.myapplication;import android.content.Context;import android.os.Bundle;import android.os.IBinder;import android.support.v7.app.AppCompatActivity;import android.view.MotionEvent;import android.view.View;import android.view.inputmethod.InputMethodManager;import android.widget.EditText;/** * Created by J!nl!n on 15/5/21. */public abstract class BaseActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); iniView(); } public abstract void iniView(); @Override public boolean dispatchTouchEvent(MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_DOWN) { View v = getCurrentFocus(); if (isShouldHideKeyboard(v, ev)) { hideKeyboard(v.getWindowToken()); } } return super.dispatchTouchEvent(ev); } /** * 根據EditText所在座標和使用者點擊的座標相對比,來判斷是否隱藏鍵盤,因為當使用者點擊EditText時則不能隱藏 * * @param v * @param event * @return */ private boolean isShouldHideKeyboard(View v, MotionEvent event) { if (v != null && (v instanceof EditText)) { int[] l = {0, 0}; v.getLocationInWindow(l); int left = l[0], top = l[1], bottom = top + v.getHeight(), right = left + v.getWidth(); if (event.getX() > left && event.getX() < right && event.getY() > top && event.getY() < bottom) { // 點擊EditText的事件,忽略它。 return false; } else { return true; } } // 如果焦點不是EditText則忽略,這個發生在視圖剛繪製完,第一個焦點不在EditText上,和使用者用軌跡球選擇其他的焦點 return false; } /** * 擷取InputMethodManager,隱藏軟鍵盤 * @param token */ private void hideKeyboard(IBinder token) { if (token != null) { InputMethodManager im = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); im.hideSoftInputFromWindow(token, InputMethodManager.HIDE_NOT_ALWAYS); } }}
當然我們還有更加簡單的方法來實現該功能,只需要重寫onTouchEvent方法即可。代碼如下:
// 點擊空白地區 自動隱藏軟鍵盤 public boolean onTouchEvent(MotionEvent event) { if(null != this.getCurrentFocus()){ /** * 點擊空白位置 隱藏軟鍵盤 */ InputMethodManager mInputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE); return mInputMethodManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(), 0); } return super .onTouchEvent(event); }
使用一個BaseActivity進行一些處理公用操作,其他Activity均繼承自該基類Activity即可,則所有介面均可實現點擊空白地區,隱藏軟鍵盤。
範例程式碼下載
Android點擊空白地區,隱藏IME軟鍵盤