Подтвердить что ты не робот

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);
4b9b3361

Ответ 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); 

Вызов вышеуказанных методов позволит убедиться, что при нажатии на "Просмотр" сохраняет и фиксирует фокус.

Ответ 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!: -)

Фил