如果 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 中为 searchView
和 setFocusable(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,则从另一个意图返回时键盘弹出的主要内容,如果未能解决你的问题,请参考以下文章