編輯:Android編程入門
在Android應用開發中,經常出現這樣的需求,用戶在輸入文字的過程中,可能不想繼續輸入了,通過滑動或者點擊其他位置(除軟鍵盤和EditText以外的任何位置),希望能夠自動收回鍵盤,這個功能可能有些rom會自己實現了,但是大部分還是沒有自己實現這個功能的,那麼如果我們要自己實現,要如何解決呢?
首先,我們當然要先攔截其他任何的用戶觸摸屏幕的事件,通過重寫Activity的boolean dispatchTouchEvent(MotionEvent ev);可是實現攔截用戶的觸摸事件。代碼如下:
@Override public boolean dispatchTouchEvent(MotionEvent ev) { DisplayUtils.hideInputWhenTouchOtherView(this, ev, getExcludeTouchHideInputViews()); return super.dispatchTouchEvent(ev); }
DisplayUtils.hideInputWhenTouchOtherView方法就是我們自己實現的當必要時候隱藏軟鍵盤的代碼了。關於hideInputWhenTouchOtherView的方法實現如下:
/** * 當點擊其他View時隱藏軟鍵盤 * @param activity * @param ev * @param excludeViews 點擊這些View不會觸發隱藏軟鍵盤動作 */ public static final void hideInputWhenTouchOtherView(Activity activity, MotionEvent ev, List<View> excludeViews){ if (ev.getAction() == MotionEvent.ACTION_DOWN){ if (excludeViews != null && !excludeViews.isEmpty()){ for (int i = 0; i < excludeViews.size(); i++){ if (isTouchView(excludeViews.get(i), ev)){ return; } } } View v = activity.getCurrentFocus(); if (DisplayUtils.isShouldHideInput(v, ev)){ InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE); if (inputMethodManager != null){ inputMethodManager.hideSoftInputFromWindow(v.getWindowToken(), 0); } } } }
方法參數中的excludeViews表示點擊這麼View不會去試圖隱藏軟鍵盤,因為有些View的觸摸事件我們有時候並不希望去隱藏軟鍵盤,比如EditText的背景布局,聊天輸入框的發送按鈕等(如果摸一下發送按鈕,鍵盤就收回去了豈不是很蛋疼)
可以看到,整個方法方法的實現過程就是通過判斷觸摸位置是屬於哪個View,如果是需要排除的View,就直接不處理了.如果判斷出來是點擊了其他任意非EditText的View,就會隱藏軟鍵盤。其他兩個判斷函數如下:
public static final boolean isTouchView(View view, MotionEvent event){ if (view == null || event == null){ return false; } int[] leftTop = {0, 0}; view.getLocationInWindow(leftTop); int left = leftTop[0]; int top = leftTop[1]; int bottom = top + view.getHeight(); int right = left + view.getWidth(); if (event.getRawX() > left && event.getRawX() < right && event.getRawY() > top && event.getRawY() < bottom){ return true; } return false; } public static final boolean isShouldHideInput(View v, MotionEvent event){ if (v != null && (v instanceof EditText)){ return !isTouchView(v, event); } return false; }
通過復用hideInputWhenTouchOtherView() 方法(甚至你可以在基類Activity裡實現)就可以在任何Activity中以最少代碼實現點擊其他任意位置收起軟鍵盤的功能了。如果代碼有什麼需要指正或者有更好的替代方案的,請大家及時告知哈。
android studio經常使用插件,可極大簡化開發,增強開發效率。不懂安裝studio插件,看參考博文:android stuido插件安裝:http://blog
在Android5.0往後的平台上,你想通過單純的調用File.delete()或著ContentResolver.delete()來刪除Sdcard上的文件會刪除失敗。
Android 廣播接收器(Broadcast Receivers)廣播接收器用於響應來之其他應用程序或者系統的廣播消息。這些消息有時被稱為事件或者意圖。
一、綁定服務介紹 前面文章中講過一般的通過startService開啟的服務,當訪問者關閉時,服務仍然存在;但是如果存在這樣一種情況:訪問者需要與服務進行通信,