从另一个活动返回时,SearchView获得焦点并打开键盘

时间:2014-02-07 09:46:31

标签: android keyboard searchview

当我从另一个活动返回主活动时,searchView获得焦点并且键盘打开,我设法通过使用以下方式阻止键盘打开:

    getWindow().setSoftInputMode(
              WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

但这还不够,如果打开并关闭操作栏下拉菜单,键盘会重新出现,因为searchView仍然具有焦点(请记住我只关闭了键盘)。我试图获得对searchView的引用并使其失去焦点,但这没有用。

所以基本上,我只是希望searchView永远不会有焦点或提示键盘打开,除非实际触摸了searchView文本区域。

3 个答案:

答案 0 :(得分:14)

这是因为SearchView是活动重新进入视图时的第一个可调焦视图 - 同样的问题can be seen for EditTexts

解决方案是相同的 - 将层次结构中的早期视图设置为可聚焦。在我的情况下,这是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

的文字之前,键盘将无法打开