如果 setIconifiedByDefault 为 false,则从另一个意图返回时键盘弹出

Posted

技术标签:

【中文标题】如果 setIconifiedByDefault 为 false,则从另一个意图返回时键盘弹出【英文标题】:Keyboard pop up when back from another intent if setIconifiedByDefault is false 【发布时间】:2018-07-10 07:22:11 【问题描述】:

大家好。当我有意地从 Fragment 1 打开 Activity 2 并按回 Activity 2 时,如果我在 Fragment 1 的 actionBar 中创建 searchView 时 setIconifiedByDefault 为 false,我的键盘会自动弹出。我试图删除 searchView.setIconifiedByDefault(false);。一切都很完美(当我在活动 2 中按回时没有弹出任何内容),但我无法获得我想要的确切布局。有什么建议可以避免键盘弹出?

在片段 1 中,我有以下代码在 actionBar 中创建 searchView

@Override
public void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(true);


@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) 
    // Inflate the options menu from XML
    inflater.inflate(R.menu.homesearchbar, menu);
    super.onCreateOptionsMenu(menu,inflater);

    SearchManager searchManager = (SearchManager) getActivity().getSystemService(Context.SEARCH_SERVICE);
    SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
    searchView.setMaxWidth(Integer.MAX_VALUE);
    searchView.setIconifiedByDefault(false);
    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() 
        @Override
        public boolean onQueryTextSubmit(String query)  return false; 
        @Override
        public boolean onQueryTextChange(String newText)  return false; 
    );

编辑 - 主页搜索栏

<?xml version="1.0" encoding="utf-8"?>
<menu
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <item
        android:id="@+id/action_search"
        android:title=""
        app:actionViewClass="android.support.v7.widget.SearchView"
        app:showAsAction="always"/>

</menu>

【问题讨论】:

也许尝试在活动 1 的 onResume 方法中隐藏软键盘? 【参考方案1】:

如果你想隐藏你的键盘状态,那么你应该在你的onResume() 方法中输入这个:这是因为你的文本字段总是在你开始或恢复你的活动/片段时占据焦点。阻止这种情况的方法如下:

@Override
public void onResume() 
    super.onResume();

InputMethodManager inputManager = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(yourTextField.getWindowToken(), 0);


或者,如果您无法在 onResume 中获取您的搜索字段,请改用它:

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

另一种方法是在活动标签中声明"stateHidden" 属性 在您的清单中。

您还可以在片段 1 中为 searchViewsetFocusable(true) 设置 setFocusable(false)。这样它就不会占据焦点。以及所有的功劳。

【讨论】:

yourTextField textField 是 actionBar 中的 searchView。如何从 onResume 函数中获取变量? @PakHoCheung 您需要在全球范围内声明您的 searchView .. :) @PakHoCheung 如果您仍然无法做到,请查看我的更新答案。 尝试全局声明searchView并在onResume中隐藏键盘,键盘也弹出。我还尝试将getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 放在 Fragment 1 的 onResume 方法或 Activity 1 的 onResume 方法上。键盘仍然弹出。我可以看到 searchView 正在编辑。 然后明确添加 clear focus () 到你的 searchview 中。就像 searchView.clearfocus();

以上是关于如果 setIconifiedByDefault 为 false,则从另一个意图返回时键盘弹出的主要内容,如果未能解决你的问题,请参考以下文章

如果复选框选中禁用其他,如果未选中启用所有 JavaScript?

检查记录是不是存在,如果是,则“更新”,如果不“插入”

Jquery“如果这个和如果那个”然后这样做

如果上游启动,Nginx 绕过缓存,如果关闭则使用缓存

如果新文件不存在则写入新文件,如果存在则追加到文件

数据库:如果存在则“更新”如果不存在则插入 [重复]