当我从另一个活动返回主活动时,searchView获得焦点并且键盘打开,我设法通过使用以下方式阻止键盘打开:
getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
但这还不够,如果打开并关闭操作栏下拉菜单,键盘会重新出现,因为searchView仍然具有焦点(请记住我只关闭了键盘)。我试图获得对searchView的引用并使其失去焦点,但这没有用。
所以基本上,我只是希望searchView永远不会有焦点或提示键盘打开,除非实际触摸了searchView文本区域。
答案 0 :(得分:14)
这是因为SearchView
是活动重新进入视图时的第一个可调焦视图 - 同样的问题can be seen for EditText
s。
解决方案是相同的 - 将层次结构中的早期视图设置为可聚焦。在我的情况下,这是Toolbar
我的SearchView
位于:
<android.support.v7.widget.Toolbar
style="@style/ToolbarStyle"
android:focusableInTouchMode="true"
android:id="@+id/search_activity_toolbar"
android:layout_height="?attr/actionBarSize"
android:layout_width="match_parent"/>
<android.support.v7.widget.SearchView
android:iconifiedByDefault="false"
... />
现在我可以在进入活动(SearchView
)时关注我的clearFocus(); requestFocus(...);
,然后当您通过搜索结果退出活动时,然后按返回返回,键盘也在同一个当你离开时说明。
请注意,链接问题上的其他一些解决方案,即setting windowSoftInputMode="stateUnchanged"
on the Activity 不对我有效。
答案 1 :(得分:3)
利用Adam S' answer,如果您在View
之前的层次结构中没有任何早期SearchView
,则可以随时添加虚拟View
:
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:focusableInTouchMode="true"/>
<android.support.v7.widget.SearchView
android:iconifiedByDefault="false"
... />
这对我也有用!
答案 2 :(得分:0)
mSearchView.setIconifiedByDefault(false);
当回来时,请将其放入onResume()
或onCreateOptionsMenu
(如果搜索在菜单中)
mSearchView.setIconified(false);
在您点击编辑searchview