Скрыть программную клавиатуру для приложения для шкафчика
Я пытаюсь закрыть softkeyboard, который открывается в другом приложении.
Я пробовал каждое решение отсюда:
Программно скрыть/показать Android Soft Keyboard или здесь: Закрыть/скрыть мягкую клавиатуру Android
Как вы можете видеть на рисунках, мне нужно закрыть клавиатуру, открытую из другого приложения, добавив в манифест, чтобы сделать невидимую клавиатуру не сделать трюк.
Чтобы отметить, что это приложение-шкафчик, я запускаю действие, когда телефон переходит в спящий режим.
Мне что-то не хватает? Тестирование других приложений для шкафчиков из магазина и не возникало этой проблемы.
Но вот результат:
![App with opened keyboard]()
![My app]()
Изменить: Подробнее
Вот как я запускаю шкафчик:
if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
//Toast.makeText(context, "" + "screeen off", Toast.LENGTH_SHORT).show();
wasScreenOn = false;
Intent intent = new Intent(context, LockScreenActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
context.startActivity(intent);
// do whatever you need to do here
//wasScreenOn = false;
}
Это код манифеста:
<activity
android:name=".ui.activities.LockScreenActivity"
android:excludeFromRecents="true"
android:noHistory="true"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateAlwaysHidden|adjustNothing"
android:theme="@style/Theme.AppCompat.Light.NoActionBar" />
Ответы
Ответ 1
Я, наконец, решил проблему. Вот как выглядит мой код манифеста для активности:
<activity
android:name=".ui.activities.LockScreenActivity"
android:excludeFromRecents="true"
android:noHistory="true"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden"
android:configChanges="keyboardHidden"
android:launchMode="singleInstance"
android:multiprocess="false"
android:stateNotNeeded="true"
android:taskAffinity=""
android:theme="@style/Theme.AppCompat.Light.NoActionBar" />
Ответ 2
Попробуйте заменить android:windowSoftInputMode="stateAlwaysHidden|adjustNothing"
с android:windowSoftInputMode="stateHidden"
строка в AndroidManifest.xml
как это
<activity
android:name=".ui.activities.LockScreenActivity"
android:excludeFromRecents="true"
android:noHistory="true"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden"
android:theme="@style/Theme.AppCompat.Light.NoActionBar" />
Для справки вы можете ссылаться http://developer.android.com/guide/topics/manifest/activity-element.html#wsoft
"stateHidden" Мягкая клавиатура скрыта, когда пользователь выбирает активности, то есть когда пользователь уверенно переходит к деятельность, а не обратно в нее из-за оставления другого деятельность.
"stateAlwaysHidden" Мягкая клавиатура всегда скрыта, когда Основное окно активности имеет фокус ввода.
Ответ 3
Это может быть достигнуто переопределение onPause()
этого действия и использование следующей части кода как
@Override
public void onPause() {
super.onPause();
if (null != getWindow()){
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
}
}
Ответ 4
Попробуйте в своей деятельности:
private void hideKeyboard() {
// Check if no view has focus:
View view = this.getCurrentFocus();
if (view != null) {
InputMethodManager inputManager = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
}
}
Ответ 5
Попробуйте этот путь
InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(
Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
Проверьте эту ссылку