最近在做一個PDA掃描儀上使用的APP,中間涉及到很多鍵盤相關(guān)的操作,稍微總結(jié)一下,作為經(jīng)驗沉淀下來,也給有需要的人提供一些思路。
1,輸入框EditText主動獲取焦點。
場景:PDA的掃描結(jié)果會自動寫入處于當(dāng)前焦點的輸入框中,要想掃描結(jié)果寫在想要寫入的輸入框中,就得讓這個輸入框獲得焦點。
方法:scanAreaEdit.requestFocus();
2,取消EditText自動彈出軟鍵盤,使得默認(rèn)隱藏軟鍵盤。
場景:當(dāng)跳轉(zhuǎn)到一個帶有EditText輸入框的頁面時,軟鍵盤會自動彈出,會帶來不好的體驗,所以需要關(guān)閉掉自動彈出的軟鍵盤。
方法1:在父控件上加:android:focusable="true"? ?android:focusableInTouchMode="true"
方法2:在AndroidManifest文件中加android:windowSoftInputMode="stateHidden"。

3,監(jiān)聽輸入框輸入完成事件。
場景:當(dāng)用PDA掃描完的時候,需要去請求服務(wù)器做業(yè)務(wù)處理,掃描一次處理一次。但是如果掃描不成功的時候,需要手動輸入,這個時候就需要判斷什么時候輸入完成,不然就會每輸入一個字符就請求一次,給服務(wù)器帶來很大的壓力。所以需要判斷輸入是否完成。
方法:
scanAreaEdit.addTextChangedListener(new TextWatcher() {
@Override
? ? public void beforeTextChanged(CharSequence s,int start,int count,int after) {}
@Override
? ? public void onTextChanged(CharSequence s,int start,int before,int count) {}
@Override
? ? public void afterTextChanged(Editable s) {
if(delayRun!=null){
//每次editText有變化的時候,則移除上次發(fā)出的延遲線程
? ? ? ? ? ? textHandler.removeCallbacks(delayRun);
}
//輸入內(nèi)容不為空的時候
? ? ? ? if(!StringUtil.isBlank(s.toString())) {
boxNoText.setText(s);
//延遲800ms,如果不再輸入字符,則執(zhí)行該線程的run方法
? ? ? ? ? ? textHandler.postDelayed(delayRun,800);
}
}
});
private HandlertextHandler =new Handler();
private RunnabledelayRun =new Runnable() {
@Override
? ? public void run() {}
}
——handler.postDelayed(delayRun, 800);? 延遲800ms執(zhí)行線程。
——handler.removeCallbacks(delayRun);? 移除當(dāng)前MessageQueue里面的待執(zhí)行的線程。
4,?判斷軟鍵盤是否顯示
場景:在一些地方需要手動輸入,一些地方是直接掃描輸入,需要通過什么方式來判斷是哪一種輸入方式,這個時候通過判斷鍵盤是否顯示是一個很好的方法,因為手動輸入的時候鍵盤必須彈出顯示。
方法:
/**
* 判斷鍵盤是否彈起
* @return
*/
private boolean isKeyboardActive(){
int screenHeight = getWindow().getDecorView().getHeight();
//獲取View可見區(qū)域的bottom
? ? Rect rect =new Rect();
getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);
return screenHeight - rect.bottom !=0;
}
碼字不易,如果覺得有幫助,一定要給我點贊喲~~
不然信不信我砸了你家燈,半夜偷親你 ( ̄ε  ̄) !!!