我试图以编程方式指定当用户按下键盘上的下一个按钮时焦点的位置。我可以让它对某些人起作用,但我有一种情况, View 被跳过,并且它下面的 View 获得焦点。
我进入调试器,焦点确实穿过我的 View ,但随后跳到最后一个。下面是我正在谈论的内容的小图。
(1) EditText
(2) AutoCompleteEditText
(3) EditText
(4) EditText
(1) -> (2) is ok
(2) -> (3) doesn't work, it does (2) -> (3) -> (4), where it briefly go to (3)
if I start at (3), then (3) -> (4) is ok.
这就是我设置焦点的方式
view.setOnKeyListener(new OnKeyListener()
{
@Override
public boolean onKey(View v, int keyCode, KeyEvent event)
{
if((event.getAction() == KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_ENTER))
{
view.clearFocus();
nextView.requestFocus();
return true;
}
return false;
}
});
最佳答案
view.setOnKeyListener(new OnKeyListener()
{
@Override
public boolean onKey(View v, int keyCode, KeyEvent event)
{
if((event.getAction() == KeyEvent.ACTION_UP) && (keyCode == KeyEvent.KEYCODE_ENTER))
{
view.clearFocus();
nextView.requestFocus();
return true;
}
return false;
}
});
找到了解决方案。如果其他人遇到此问题,只需将 ACTION_DOWN 更改为 ACTION_UP,这样您的代码仅在按下完成时触发。我猜测 ACTION_DOWN 会进行多次调用。但我不确定。
关于Android requestFocus() 跳过 edittext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29926709/