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

tim*_*117 12 keyboard android searchview

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

    getWindow().setSoftInputMode(
              WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
Run Code Online (Sandbox Code Playgroud)

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

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

Ada*_*m S 20

这是因为SearchView当活动重新进入视图时,它是第一个可聚焦的视图 - s 可以看到EditText同样的问题.

解决方案是相同的 - 将层次结构中的早期视图设置为可聚焦.在我的情况下,这是ToolbarSearchView在上面的:

<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"
    ... />
Run Code Online (Sandbox Code Playgroud)

现在我可以SearchView在进入活动(clearFocus(); requestFocus(...);)时关注我,然后当您通过搜索结果退出活动时,然后按返回返回,键盘处于与您离开时相同的状态.

需要注意的是一些关于链接的问题,即其他解决方案的设置windowSoftInputMode="stateUnchanged"上的活动没有为我工作.


小智 7

利用Adam S 的回答,如果View在 之前的层次结构中没有任何更早的内容SearchView,则可以始终包含一个View像这样的虚拟对象:

<View
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:focusableInTouchMode="true"/>

<android.support.v7.widget.SearchView
    android:iconifiedByDefault="false"
    ... />
Run Code Online (Sandbox Code Playgroud)

这也对我有用!


归档时间:

查看次数:

6158 次

最近记录:

7 年,7 月 前