Android requestFocus() 跳过 edittext

标签 android android-edittext

我试图以编程方式指定当用户按下键盘上的下一个按钮时焦点的位置。我可以让它对某些人起作用,但我有一种情况, 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/

相关文章:

android - Ice Cream Sandwich 破坏了 EditText 的 setError()?

android - 更改 EditText 时播放声音 - android

android - EditText - inputType =""和 inputType ="text"有什么区别?

android - 如何在 android 中动态创建的 TableLayout 中设置 EditText 列表的 Id

android - 如何在不调用 onCreate() 的情况下返回第一个 Activity

java.lang.UnsatisfiedLinkError : dlopen failed: library "libc++.so" not found 错误

java - 使用 OpenGL ES 3.0 渲染三角形

android - 使用 Retrofit 刷新 OAuth token 而不修改所有调用

java - 如何大写Android EditText中的每个字母?

java - Websocket 服务器 Android