Android EditText imeOptions使actionSearch像actionDone一样()

亦余心之所善兮,虽九死其犹未悔。这篇文章主要讲述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舱单声明
另一答案【Android EditText imeOptions使actionSearch像actionDone一样()】这适用于我使用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; } });


    推荐阅读