Android softkeyboard showSoftInput vs toggleSoftInput
showSoftInput()
не показывает клавиатуру для меня, но toggleSoftInput()
делает. Я видел еще одну запись, которая говорила, что отключает жесткую клавиатуру при использовании эмулятора, но я не использую эмулятор. Я загружаю APK на реальном устройстве без жесткой клавиатуры. Не должны ли работать оба метода? Почему не работает showSoftInput()
? Я хотел бы явно связать клавиатуру с определенным текстовым полем.
Не работает:
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
editText.setText("textchange"); //i see the text field update
imm.showSoftInput(editText, InputMethodManager.SHOW_FORCED);
Работает:
InputMethodManager imm = (InputMethodManager) getDelegate().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,0);
Ответы
Ответ 1
Кажется, что клавиатура изначально отображается, но скрыта чем-то другим, потому что следующее работает (но на самом деле грязно работает):
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
editText.postDelayed(new Runnable()
{
@Override
public void run()
{
editText.requestFocus();
imm.showSoftInput(editText, 0);
}
}, 100);
И при просмотре логарифма я подозреваю, что причина этого сообщения скрывает первоначально показанную клавиатуру:
Скрыть диалог буфера обмена при запуске ввода: завершено кем-то еще...!
Ответ 2
Показать клавиатуру + фокус, а также, если вы хотите скрыть клавиатуру
@Override
public void onResume () {
super.onResume();
inputSearch.setFocusableInTouchMode(true);
inputSearch.requestFocus();
// Show Keyboard
InputMethodManager imm = (InputMethodManager) getSherlockActivity().getSystemService(
Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(inputSearch, InputMethodManager.SHOW_IMPLICIT);
}
P.S inputSearch = (EditText) getSherlockActivity(). findViewById (R.id.inputSearch);
// Hide Keyboard
InputMethodManager imm = (InputMethodManager) getSherlockActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(inputSearch.getWindowToken(), 0);
Ответ 3
Точный ответ на этот вопрос, почему showSoftInput не работает, и toggleSoftInput делает?
Является ли представление, к которому вы пытаетесь отобразить клавиатуру, не имеет фокуса. Чтобы решить эту проблему и использовать метод showSoftInput, вам нужно будет вызвать следующие методы в вашем представлении:
setFocusable(true);
setFocusableInTouchMode(true);
Вызов вышеуказанных методов позволит убедиться, что при нажатии на "Просмотр" сохраняет и фиксирует фокус.
Ответ 4
showSoftInput() не работает, когда устройство имеет жесткую (выдвижную) клавиатуру
Android-дисплей софт-клавиатурой с showSoftInput не работает?
Ответ 5
Попробуйте следующее:
public void showTheKeyboard(Context context, EditText editText){
InputMethodManager imm = (InputMethodManager)context.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);
}
Если это не работает, прочитайте учебник из здесь
Ответ 6
public void hideKeyboard() {
myTextView.setFocusable(true);
myTextView.setFocusableInTouchMode(true);
imm.hideSoftInputFromWindow(myTextView.getWindowToken(), 0);
}
РАБОТЫ
public void hideKeyboard() {
imm.hideSoftInputFromWindow(myTextView.getWindowToken(), 0);
}
НЕ РАБОТАЕТ
imm рассматривается ранее, когда я использую фрагмент, поэтому:
Объявить imm в фрагменте
private InputMethodManager imm;
Затем в фрагменте добавьте:
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
imm = (InputMethodManager)
getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
}
Он говорит после 3-4 часов исследований и неудач.
Спасибо user_CC!: -)
Фил