我最近一直在努力使用我的Android应用程序。在我的应用程序中,我有一个TableLayout,我在应用程序代码中动态填充,包括每个单元格中的EditText,软键盘的“下一步”按钮行为不正确(跳到下一行,然后到达同一行中的其他单元格) )。所以我决定通过为EditTexts分配ID然后使用setNextFocusDownId方法指向下一个EditText来手动覆盖焦点更改。但这也不起作用。
我会解释一下情况。 我的应用程序有一个包含三列的TableLayout,这样:
EditText(1) EditText(5) EditText(10)
EditText(50) EditText(100) EditText(160)
EditText(500) EditText(1000) EditText(1600)
EditText(2500) EditText(3000) EditText(3500)
EditText(3800) EditText(4000) EditText(4500)
括号内的数字是EditText的ID。在填充此TableLayout时,我将EditTexts列表保存在名为focusList的ArrayList中,以便稍后分配NextFocus Id。填充表格后,我称之为:
private void manageFocusList() {
for (int i=0; i<focusList.size()-1; i++){
focusList.get(i).setImeOptions(0x05);
focusList.get(i).setNextFocusDownId(focusList.get(i+1).getId());
}
focusList.get(focusList.size()-1).setImeOptions(0x06);
}
EditText列表在ArrayList中正确排序,并且EditTexts之间的链接已成功完成。
为了测试这一点,当我按下软键盘中的Next按钮时,我放了一些打印痕迹。这就是我得到的:
01-07 19:34:32.121: I/System.out(27287): My ID is: 1
01-07 19:34:32.121: I/System.out(27287): NextFocusDown: 5
01-07 19:34:32.521: I/System.out(27287): My ID is: 5
01-07 19:34:32.521: I/System.out(27287): NextFocusDown: 10
01-07 19:36:50.146: I/System.out(27287): My ID is: 10
01-07 19:36:50.146: I/System.out(27287): NextFocusDown: 50
依旧......
但是在应用程序中,它会以这种方式跳转:
1->5
5->50
50->100
100->160
160->1600
1600->1000
1000->500
500->2500
从现在开始,它继续做正确的
2500->3000
3000->3500
3500->3800
3800->4000
4000->4500
我在三星Galaxy S3和模拟器中进行了测试,行为完全相同 我希望你能帮帮我! 谢谢你的时间!
答案 0 :(得分:4)
好的,经过一些研究,我终于找到了解决方案,但我不知道造成这种行为的原因。
我必须使用onEditorAction事件侦听器手动请求下一个edittext的焦点。我必须更改的代码中唯一的部分是manageFocusList()方法:
private void manageFocusList() {
for (int i = 0; i < focusList.size() - 1; i++) {
focusList.get(i).setImeOptions(5);
final int nextId = focusList.get(i + 1).getId();
focusList.get(i).setOnEditorActionListener(
new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId,
KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_NEXT){
((EditText) findViewById(nextId)).requestFocus();
return true;
}
return false;
}
});
}
focusList.get(focusList.size() - 1).setImeOptions(6);
}