標籤:man chm number 美的 android中 input word cat meta
https://www.jianshu.com/p/3d31d681f4bc
問題:當EditText失去焦點時做內容校正
情境:使用者編輯EditText
將內容清空,當點擊空白地方時關閉軟鍵盤,同時校正EditText
的內容,如果為空白則設為"1"。
問題遠沒有看著那麼簡單哦
第一步:添加焦點監聽
view.setOnFocusChangeListener(new OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { if(!hasFocus){ Log.d("Tag","lose focus"); if(TextUtils.isEmpty(((EditText)v).getText().toString().trim())){ view.setText("1"); } }else { Log.d("Tag","get focus"); } } });
第二步:點擊空白地方時關閉軟鍵盤
在Activity中使用以下代碼:
@Override public boolean dispatchTouchEvent(MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_DOWN) { View v = getCurrentFocus(); if (isShouldHideInput(v, ev)) { InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); if (imm != null) { imm.hideSoftInputFromWindow(v.getWindowToken(), 0); } } return super.dispatchTouchEvent(ev); } // 必不可少,否則所有的組件都不會有TouchEvent了 if (getWindow().superDispatchTouchEvent(ev)) { return true; } return onTouchEvent(ev); } public boolean isShouldHideInput(View v, MotionEvent event) { if (v != null && (v instanceof EditText)) { int[] leftTop = {0, 0}; //擷取輸入框當前的location位置 v.getLocationInWindow(leftTop); int left = leftTop[0]; int top = leftTop[1]; int bottom = top + v.getHeight(); int right = left + v.getWidth(); if (event.getX() > left && event.getX() < right && event.getY() > top && event.getY() < bottom) { // 點擊的是輸入框地區,保留點擊EditText的事件 return false; } else { //使EditText觸發一次失去焦時間點事件 v.setFocusable(false);// v.setFocusable(true); //這裡不需要是因為下面一句代碼會同時實現這個功能 v.setFocusableInTouchMode(true); return true; } } return false; }
加入以上代碼你驚喜的發現問題貌似完美的解決了。但是,如果你的介面中有多個EditText
,你會發現當點擊第一個EditText
時,第二個EditText
會有游標閃以下,或者點擊第二個或者之後的EditText
,第一個EditText
會有游標閃一下。通過Log你會發現從第二次點擊EditText
起,每次點擊EditText
都會先觸發一次失去焦點,再觸發一次擷取焦點。由此可以推斷當存在多個EditText
時,一個EditText
失去焦點會觸發另一個擷取焦點。這問題必須解決,而且出現螢幕游標閃動影響使用者體驗。
第三步:避免另一個EditText擷取焦點
解決這個問題的做法是在同一個XML中將一個不會有響應的控制項(如TextView
)設定如下屬性:
android:focusable="true"android:focusableInTouchMode="true"
會飛的大象
連結:https://www.jianshu.com/p/3d31d681f4bc
來源:簡書
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。
Android中EditText焦點問題