如果 setIconifiedByDefault 为 false,则从另一个意图返回时弹出键盘
Keyboard pop up when back from another intent if setIconifiedByDefault is false
大家好。当我有意从 Fragment 1 打开 Activity 2 并按回 Activity 2 时,如果在 Fragment 1 的 actionBar 中创建 searchView 时 setIconifiedByDefault 为 false,我的键盘会自动弹出。我试图删除searchView.setIconifiedByDefault(false);
。一切正常(当我在 Activity 2 中按回时没有弹出任何内容)但我无法获得我想要的确切布局。有什么避免弹出键盘的建议吗?
在 Fragment 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>
如果你想隐藏你的键盘状态,那么你应该在你的 onResume()
方法中输入这个: 发生这种情况是因为你的文本字段总是在你开始或恢复你的 activity/fragment 时获得焦点.停止这种方式的方法如下:
@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 中为 searchView
和 setFocusable(true)
设置 setFocusable(false)
。这样它就不会占据焦点。以及所有功劳都归功于你。
大家好。当我有意从 Fragment 1 打开 Activity 2 并按回 Activity 2 时,如果在 Fragment 1 的 actionBar 中创建 searchView 时 setIconifiedByDefault 为 false,我的键盘会自动弹出。我试图删除searchView.setIconifiedByDefault(false);
。一切正常(当我在 Activity 2 中按回时没有弹出任何内容)但我无法获得我想要的确切布局。有什么避免弹出键盘的建议吗?
在 Fragment 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>
如果你想隐藏你的键盘状态,那么你应该在你的 onResume()
方法中输入这个: 发生这种情况是因为你的文本字段总是在你开始或恢复你的 activity/fragment 时获得焦点.停止这种方式的方法如下:
@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 中为 searchView
和 setFocusable(true)
设置 setFocusable(false)
。这样它就不会占据焦点。以及所有功劳都归功于你。