Программный ввод Android не исчезает при возврате с ActionBar
Я использую Android SearchWidget на SearchActivity для поисковых запросов. Он автоматически получает фокус и отображается клавиатура с мягким вводом.
Тем не менее, когда пользователь возвращается с ActionBar ( но не с кнопкой назад), программный ввод остается на экране, даже если активность имеет
android:windowSoftInputMode="stateHidden|adjustUnspecified"
как описано на https://developer.android.com/training/keyboard-input/visibility.html
Кажется, это работает только тогда, когда вы идете вперед, а не возвращаетесь.
Проблема: может быть много действий, вызывающих SearchActivity, и для них stateAlwaysHidden
может не подходить (Другими словами: я не знаю поведение всех других видов деятельности.)
ОБНОВЛЕНИЕ: предоставление кода, на самом деле просто actionBar.setDisplayHomeAsUpEnabled(true);
@Override
protected void onCreate(Bundle savedInstanceState) {
....
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
// get the action bar
ActionBar actionBar = getActionBar();
if (null!=actionBar){
// Enabling Back navigation on Action Bar icon
actionBar.setDisplayHomeAsUpEnabled(true);
}
}
....
}
UDATE 2:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
return super.onOptionsItemSelected(item);
}
1 ответ
Используя стержень и SO ответы:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
// fix bug when soft-input stays on the screen when navigating away with ActionBar home/back button
// https://stackru.com/questions/1109022/close-hide-the-android-soft-keyboard
//getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN); had no affect
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
//check if no view has focus:
View view = this.getCurrentFocus();
if(view != null){
//imm.hideSoftInputFromWindow(v.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
return super.onOptionsItemSelected(item);
}