Android EditText imeOptions使actionSearch像actionDone一样?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android EditText imeOptions使actionSearch像actionDone一样?相关的知识,希望对你有一定的参考价值。

我有一个奇怪的错误。

我有一个EditText,我正在使用TextWatcher进行搜索,当我键入3个字母以上时,我正在执行搜索。

直到最近我才有一个正常的EditText,我想在键盘上有一个搜索图标,所以我在代码中添加了我的EditText:

searchField.setImeOptions(EditorInfo.IME_ACTION_SEARCH);

现在它有搜索图标,现在我的问题。当按下搜索图标时,我想要做的就是关闭键盘。无需搜索。

这是我的代码:

searchField.setOnEditorActionListener(new TextView.OnEditorActionListener() {
                @Override
                public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                    if (event != null&& (event.getKeyCode() == KeyEvent.KEYCODE_SEARCH)) {
                        hideSoftKeyboard();
                    }
                    return false;
                }
            });

hideSoftKeyboard是一种关闭键盘的方法,这就是里面的代码:

public void hideSoftKeyboard() {
    if (getActivity().getCurrentFocus() != null) {
        InputMethodManager inputMethodManager = (InputMethodManager) getActivity().getSystemService(Activity.INPUT_METHOD_SERVICE);
        inputMethodManager.hideSoftInputFromWindow(getActivity().getCurrentFocus().getWindowToken(), 0);
    }
}

现在,我的键盘关闭,但由于某种原因,它后面会出现一个“普通”键盘。带有搜索图标的键盘正在关闭,但是出现了带有输入图标的键盘,并且没有输入任何内容..没有连接到任何编辑文本或其他东西,我只有1个编辑文本在该屏幕中我无法弄清楚怎么了。

如果我改回IME_ACTION_DONE一切正常。

编辑1:

我在清单中的活动:

<activity
        android:name=".UI.activity.HomeActivity"
        android:label="@string/app_name"
        android:launchMode="singleTask"
        android:screenOrientation="portrait"
        android:theme="@android:style/Theme.Holo.Light.NoActionBar"
        android:windowSoftInputMode="adjustResize" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

和我在xml中的EditText:

<EditText
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:id="@+id/search_document_main"
                    android:typeface="serif"
                    android:visibility="invisible"
                    android:singleLine="true"
                    android:background="@color/top_bar_bg_color"
                    android:hint="Search" />

我知道我做错了什么?

另外,有没有办法可以在不使用imeOption Search的情况下显示搜索图标?

答案

尝试从EditText窗口获取窗口令牌。也许你目前的焦点项目不是EditText

public void hideSoftKeyboard() {
    InputMethodManager imm = (InputMethodManager) getSystemService(
            Context.INPUT_METHOD_SERVICE
    );
    imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
}

您还可以简化您的监听器:

new TextView.OnEditorActionListener() {
                @Override
                public boolean onEditorAction (TextView v, int actionId, KeyEvent event) {
                    if (actionId == EditorInfo.IME_ACTION_SEARCH) {
                        hideKeyboard();
                        return true;
                    }
                    return false;
                }
            }

如果您仍然有问题,请添加您的Activity layout并添加Activity舱单声明

另一答案

这适用于我使用actionSearch

txtAutocomplete.setOnEditorActionListener(new TextView.OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView textView, int actionId, KeyEvent keyEvent) {
                boolean handled = false;
                if(actionId == EditorInfo.IME_ACTION_SEARCH || actionId == EditorInfo.IME_ACTION_UNSPECIFIED)
                {
                    txtAutocomplete.clearFocus();

                    InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
                    imm.hideSoftInputFromWindow(txtAutocomplete.getWindowToken(),0);

                    handled = true;
                }
                return handled;
            }
        });

以上是关于Android EditText imeOptions使actionSearch像actionDone一样?的主要内容,如果未能解决你的问题,请参考以下文章

Android从零单排系列七《Android视图控件——EditText》

Android从零单排系列七《Android视图控件——EditText》

Android从零单排系列七《Android视图控件——EditText》

android EditText inputType说明

android editText 监听事件

Android EditText 操作。。。