最近在做一個(gè)PDA掃描儀上使用的APP,中間涉及到很多鍵盤相關(guān)的操作颂跨,稍微總結(jié)一下,作為經(jīng)驗(yàn)沉淀下來扯饶,也給有需要的人提供一些思路恒削。
1池颈,輸入框EditText主動(dòng)獲取焦點(diǎn)。
場(chǎng)景:PDA的掃描結(jié)果會(huì)自動(dòng)寫入處于當(dāng)前焦點(diǎn)的輸入框中钓丰,要想掃描結(jié)果寫在想要寫入的輸入框中躯砰,就得讓這個(gè)輸入框獲得焦點(diǎn)。
方法:scanAreaEdit.requestFocus();
2携丁,取消EditText自動(dòng)彈出軟鍵盤琢歇,使得默認(rèn)隱藏軟鍵盤。
場(chǎng)景:當(dāng)跳轉(zhuǎn)到一個(gè)帶有EditText輸入框的頁(yè)面時(shí)梦鉴,軟鍵盤會(huì)自動(dòng)彈出李茫,會(huì)帶來不好的體驗(yàn),所以需要關(guān)閉掉自動(dòng)彈出的軟鍵盤肥橙。
方法1:在父控件上加:android:focusable="true"? ?android:focusableInTouchMode="true"
方法2:在AndroidManifest文件中加android:windowSoftInputMode="stateHidden"魄宏。
3,監(jiān)聽輸入框輸入完成事件存筏。
場(chǎng)景:當(dāng)用PDA掃描完的時(shí)候宠互,需要去請(qǐng)求服務(wù)器做業(yè)務(wù)處理,掃描一次處理一次椭坚。但是如果掃描不成功的時(shí)候予跌,需要手動(dòng)輸入,這個(gè)時(shí)候就需要判斷什么時(shí)候輸入完成善茎,不然就會(huì)每輸入一個(gè)字符就請(qǐng)求一次匕得,給服務(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有變化的時(shí)候,則移除上次發(fā)出的延遲線程
? ? ? ? ? ? textHandler.removeCallbacks(delayRun);
}
//輸入內(nèi)容不為空的時(shí)候
? ? ? ? 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,?判斷軟鍵盤是否顯示
場(chǎng)景:在一些地方需要手動(dòng)輸入鞠苟,一些地方是直接掃描輸入,需要通過什么方式來判斷是哪一種輸入方式秽之,這個(gè)時(shí)候通過判斷鍵盤是否顯示是一個(gè)很好的方法当娱,因?yàn)槭謩?dòng)輸入的時(shí)候鍵盤必須彈出顯示。
方法:
/**
* 判斷鍵盤是否彈起
* @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;
}
碼字不易考榨,如果覺得有幫助跨细,一定要給我點(diǎn)贊喲~~
不然信不信我砸了你家燈,半夜偷親你 ( ̄ε  ̄) !!!