【筆記】android裡的EditText焦點的應用
對於在介面裡有EditText控制元件的,當使用輸入鍵盤上的右下角那個功能鍵,會發現自動把焦點移到EditText中開始編輯。
對於想在EditText編輯完後進行某種處理,而後面又沒有控制元件來獲取焦點時,使用setOnFocusChangeListener容易出現焦點自動改變不了的情況。如下面例子,希望在輸入正確年份後,在一個TextView上顯示相應地年齡。不過發現在輸入正確年份後,輸入法鍵盤不會消失,焦點還是在這個EditText上,這就導致運算沒法進行,只能通過按返回鍵才能結束這個焦點狀態。
edittxt.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean isfocused) {
String getyear = yearEdt.getText().toString();
if(!(null==getyear || getyear.length()==0) && getyear.length()==4){
if(getyear.matches("([1-2])(\\d{3})")){
int currentyear=Calendar.getInstance().get(Calendar.YEAR);
int age = currentyear - Integer.parseInt(getyear);
if(age>0){
agetxt.setText(String.valueOf(age)+"歲");
return;
}
}
Toast.makeText(MainActivity.this, "請輸入正確的出生年份", Toast.LENGTH_LONG).show();
}
}
});
這裡,可以用addTextChangedListener(new TextWatcher() {});來動態地監聽輸入地內容,當滿足正確地輸入內容後,自動開始進行相關操作。還是上面舉那個例子。
edittxt.addTextChangedListener(new TextWatcher() {
@Override public void onTextChanged(CharSequence s, int start, int before, int count) { String getyear = yearEdt.getText().toString(); if(!(null==getyear || getyear.length()==0) && getyear.length()==4){ yearEdt.clearFocus(); if(getyear.matches("([1-2])(\\d{3})")){ int currentyear=Calendar.getInstance().get(Calendar.YEAR); int age = currentyear - Integer.parseInt(getyear); if(age>0){ agetxt.setText(String.valueOf(age)+"歲"); sexGroup.requestFocus(); sexGroup.requestFocusFromTouch(); InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(yearEdt.getWindowToken(), 0); return; } } Toast.makeText(MainActivity.this, "請輸入正確的出生年份", Toast.LENGTH_LONG).show(); yearEdt.requestFocus(); } } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void afterTextChanged(Editable s) { } });由於是在每個輸入字元改變時就會觸發監聽,所以在輸入長度滿足條件後便開始進行資料處理,使用clearFocus()失去焦點,不再進行編輯。內容正確則計算結果輸出顯示。然後將焦點移到下一個控制元件上,這就使用requestFocus(),requestFocusFromTouch()來主動獲取焦點。不過此時輸入法的鍵盤不會隱藏,非常礙眼。通過呼叫系統的輸入法服務
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(yearEdt.getWindowToken(), 0);來將鍵盤關閉。
相關文章
- android的EditText,焦點會預設在第一個EditText中,我不希望焦點預設在任何EditText中,如何做?Android
- 關於EditText焦點監聽
- EditText無法獲取焦點(android:descendantFocusability用法簡析 )Android
- Android筆記-3-EditText的屬性介紹Android筆記
- 本日②三事 listView中editText焦點丟失View
- Android 的 View 焦點定址AndroidView
- 馬克筆記—Android 端開源的 Markdown 筆記應用筆記Android
- EditText的點選事件遮蔽鍵盤響應事件
- Android應用開發筆記(一)Android筆記
- 理解音訊焦點 (第 2/3 部分):更多的音訊焦點用例音訊
- RPA機器人:未來行業應用的新焦點機器人行業
- Unreal Cook Book:VR應用中的焦點目標拾取UnrealVR
- Android應用安全防護的點點滴滴Android
- Android筆記-5-EditText密碼和Checkbox二選一Android筆記密碼
- android 管理應用的記憶體Android記憶體
- android:listView Button 焦點問題AndroidView
- Android EditText 修改提示字型的大小Android
- Tea,為 hacker 而生的筆記應用筆記
- 理解音訊焦點 (第1/3部分):常見的音訊焦點用例音訊
- 『應用機器學習的建議』的學習筆記機器學習筆記
- Qt中的焦點事件QT事件
- 遮罩效果的焦點圖遮罩
- Android TV端RecyclerView焦點亂跑AndroidView
- 資料結構筆記-棧的應用資料結構筆記
- 超實用的jQuery百葉窗焦點圖動畫jQuery動畫
- 設定文字框得到焦點或者失去焦點時的樣式
- Android EditText 的使用及值得注意的地方Android
- 【Android】不依賴焦點和選中的TextView跑馬燈AndroidTextView
- ChartDirector應用筆記(一)筆記
- ChartDirector應用筆記(二)筆記
- ChartDirector應用筆記(三)筆記
- DOM 元素中的焦點管理
- Android實現自帶橫線的EditTextAndroid
- Oracle裡時間的應用Oracle
- 筆記-iOS應用程式的啟動過程筆記iOS
- 「構建安全的 PHP 應用」讀書筆記PHP筆記
- 【筆記】遍歷二叉樹的應用筆記二叉樹
- 超酷實用的jQuery焦點圖賞析及原始碼jQuery原始碼