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

时间:2018-01-31 08:40:05

标签: android android-fragments android-intent android-actionbar searchview

enter image description here

你好。当我打算从片段1打开活动2并按下活动2时,如果我在片段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; }
    });
}

编辑 - homesearchbar

<?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 个答案:

答案 0 :(得分: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);

另一种方法是在activity标记中声明"stateHidden"属性 在你的清单中。

您还可以在片段1中为setFocusable(false)searchView设置setFocusable(true)。这样它就不会成为焦点。以及为此你所有的学分。