【问题标题】:Why I get a KeyCode=66 when tab key is pressed?为什么按下 Tab 键时我得到 KeyCode=66?
【发布时间】:2012-02-01 12:07:17
【问题描述】:

我正在使用平板电脑 (v3.1)。 我为 EditText 设置了一个 onKeyListener:

myEditText.setOnKeyListener( new View.OnKeyListener() { 
    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        if( keyCode == KeyEvent.KEYCODE_ENTER &&
            event.getAction() == KeyEvent.ACTION_DOWN ) {
           runStuff();
        }
        return false;
        }
    });

当按下 Tab 键时,我收到一个 keyCode 66(不是 API 所说的 61),与 KEYCODE_ENTER 相同。

【问题讨论】:

    标签: android


    【解决方案1】:

    它实际上并不取决于设备,而是取决于您选择的键盘。我以前遇到过这个。如果您将键盘换成不同的键盘,您会发现它突然开始像您预期的那样做出反应。我不确定这是什么原因,但您应该尝试一下,看看是否能解决您的问题。

    【讨论】:

    • 你是说改变键盘语言吗?
    • 可能不是键盘语言。而是键盘应用程序。
    【解决方案2】:

    这取决于您使用键盘的环境。对于文本/纯文本输入,这应该不是问题。但是,选项卡用于将焦点从一个元素更改为另一个元素。由于大多数 SoftIME 的 Android 上不存在选项卡,它会拦截 TAB 并输入 Enter,因此在大多数情况下,这有助于填写表单或在输入后焦点需要更改为另一个元素。

    ex) 用户名​​和密码

    用户输入他们的用户名并按回车键,焦点现在更改为密码列。

    另外,android 使用一个叫做 EditorInfo 的东西来改变它的键盘状态。看看这个线程,简单使用EditorInfo -> Android: how to make keyboard enter button say "Search" and handle its click?

    我遇到过几次这个问题。更改它的唯一方法是覆盖 onKeyListener 或在其中覆盖 onKeyDown 函数的自定义 EditText。这样调用 keyCode == KeyEvent.KEYCODE_TAB 会给你实际的价值。

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if(keyCode == KeyEvent.KEYCODE_TAB) 
        {
            tab();   // implemented seperate
            return false; // ignore focus changes when tab is pressed
        }
        super.onKeyUp(keyCode, event);
    }
    
    // additional helper methods
    
    public void insert(String s)
    {
        int start = start();
        int end = end();
        if(start != end)
        {
            replace(s, start, end);
        }
        else
        {
            getEditableText().insert(start, s);
        }
        setSelection(start);  // changes focus back to edittext
    }
    
    public void replace(String s, int st, int e)
    {
        getEditableText().replace(st, e, s);
    }
    
    public void tab()
    {
        insert("\t");
    }
    

    希望对你有所帮助。

    -克里斯

    【讨论】:

      猜你喜欢
      • 2012-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-01
      相关资源
      最近更新 更多