2

再会!

我有一个 Android 应用程序(v2.3.3 及更高版本),可让您通过EditText控件进行搜索。我正在使用以下代码来检测用户何时完成并按下硬键或软键来执行搜索:

EditText editText = (EditText)findViewById(R.id.search_box);    
editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {

        if (actionId == EditorInfo.IME_ACTION_SEARCH ||
            actionId == EditorInfo.IME_ACTION_DONE ||
            (event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) 
        {
                performSearch();              
                return true;
        }

        return false;
    }
});

显然,这并没有捕捉到表达“Enter”的所有可能方式,因为 beta 测试人员只是告诉我他们的 HTC Evo 软键盘上的“Enter”键没有任何作用。搜索硬键(放大镜)有效,但此代码未从软键盘捕获事件。

阅读一些帖子,这类问题的大多数答案都包含上述部分或全部逻辑。我还读到 HTC 做一些不同的键盘操作。

有没有人有一些防弹代码来检测任何设备上的“Enter”输入?

谢谢!

4

3 回答 3

0

我认为 textchangelistener 可以捕获回车键,试试这个

        commentt.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            // TODO Auto-generated method stub
            // if enter is added to your CharSequence 
            // { 
            //      do search

            // }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
            // TODO Auto-generated method stub

        }

        @Override
        public void afterTextChanged(Editable s) {
            // TODO Auto-generated method stub

        }
    });
于 2013-10-07T08:28:25.097 回答
0
@Override
public boolean dispatchKeyEvent(KeyEvent event)
{
    if (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)
    {
         performSearch();              
         return true;
    }

    return false;

}
于 2013-04-15T22:09:31.910 回答
0

我已经遇到了同样的问题。删除对 actionId 的检查,只需event.getAction() == KeyEvent.ACTION_DOWN在 if 语句中检查:

@Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {

        if (actionId == KeyEvent.ACTION_DOWN) 
        {
                performSearch();              
                return true;
        }

        return false;
    }
于 2013-04-15T20:29:00.863 回答