我有一個片段中的線性佈局,裏面有一堆複選框和各種edittext小部件。基本上就像一個測驗。一堆多選(複選框)和十幾個簡短的回答(edittexts)問題。使EditText在完成編輯時將焦點傳遞迴父佈局。
我想讓用戶能夠點擊一個edittext,輸入一個答案,然後按DONE或者點擊佈局的任何其他地方,讓小部件失去焦點和鍵盤隱藏。目前,我正在覆蓋每個edittext的setOnEditorActionListener
和setOnFocusChangeListener
方法,以將焦點重新分配給主佈局,並分別隱藏鍵盤。這是所謂的「input_7d」爲一個EditText實例代碼:
final EditText input_7d = (EditText) thisview.findViewById(R.id.txtinput_7d);
final LinearLayout parentLayout = (LinearLayout) thisview.findViewById(R.id.main_layout);
input_7d.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if(actionId == EditorInfo.IME_ACTION_DONE) {
parentLayout.requestFocus();
}
return false;
}
});
input_7d.setOnFocusChangeListener(new TextView.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(!hasFocus){
InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(parentLayout.getWindowToken(),InputMethodManager.HIDE_NOT_ALWAYS);
}
}
});
這是惱人的每一個我的EditText加做的,這意味着編輯大量的代碼,如果刪除它們,或在未來增加更多。我想要做的是有一個自定義的edittext類,它可以將焦點返回給它的父視圖/佈局並隱藏鍵盤,然後使用它來代替內置的edittext。我對此很新,而且我一直無法找到自定義edittext將焦點傳回給它的父級佈局的方法。有沒有更好的方式來獲得一堆edittexts都有這種行爲,而不是所有「硬編碼」到我的片段類?
我知道可以在Android中定義自定義視圖,您也可以在其中定義自定義視圖的標準行爲。我會建議嘗試一下。 –
@Stitchblade是的,我最終這樣做了,正如我在下面的答案中所展示的那樣。不幸的是,我無法弄清楚如何將焦點傳遞給自定義視圖內的另一個視圖/佈局。但至少我的自定義視圖爲我添加的每個editText保存了40行代碼。 – Samuel