Скрыть клавиатуру, когда вход получает фокус

ситуация

У меня есть приложение для Android, которое использует внешнюю клавиатуру и хочу скрыть программную клавиатуру, когда Entry контроль получает фокус.

Ссылка

Следуя этой документации Android, он заявляет следующее:

Примечание. Если к устройству пользователя подключена аппаратная клавиатура, программный метод ввода не отображается.

Тем не менее, в некоторых устройствах Android, когда Entry получает фокус, мягкий ввод действительно появляется.

Как я могу получить, чтобы скрыть в этих случаях мягкий ввод?

Заранее спасибо!

2 ответа

Решение

Вы можете скрыть программную клавиатуру с помощью этого кода

  getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

Получить экземпляр вашего EditText

EditText editText = (EditText) findViewById(R.id.edittext);

Чтобы предотвратить появление SoftKeyboard по умолчанию в EditText, переопределите следующие события

// Сделать пользовательскую клавиатуру видимой

    edittext.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if (hasFocus) showCustomKeyboard(v);
            else hideCustomKeyboard();
        }
    });
    edittext.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            showCustomKeyboard(v);
        }
    });
    edittext.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            EditText edittext = (EditText) v;
            int inType = edittext.getInputType();       // Backup the input type
            edittext.setInputType(InputType.TYPE_NULL); // Disable standard keyboard
            edittext.onTouchEvent(event);               // Call native handler
            edittext.setInputType(inType);              // Restore input type
            return true; // Consume touch event
        }
    });
}
public void hideCustomKeyboard() {
    keyboardView.setVisibility(View.GONE);
    keyboardView.setEnabled(false);
}
public void showCustomKeyboard( View v) {
    keyboardView.setVisibility(View.VISIBLE);
    keyboardView.setEnabled(true);
    if( v!=null ){
        ((InputMethodManager)getSystemService(Activity.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(v.getWindowToken(), 0);
    }
}
public boolean isCustomKeyboardVisible() {
    return keyboardView.getVisibility() == View.VISIBLE;
}
@Override public void onBackPressed() {
    if( isCustomKeyboardVisible() ) hideCustomKeyboard(); else this.finish();
}

Отказ от ответственности:- Я внедрил пользовательскую клавиатуру в своем приложении и написал этот учебник - http://inducesmile.com/android/how-to-create-an-android-custom-keyboard-application/

Это работает для меня:

public static void DisableSoftKeyboard (EditText editText)
{
    ((InputMethodManager)GetSystemService(Context.InputMethodService)).HideSoftInputFromWindow(editText.WindowToken, 0);
    if (Build.VERSION.SdkInt >= BuildVersionCodes.Honeycomb) {
        editText.SetRawInputType (InputTypes.ClassText);
        editText.SetTextIsSelectable (true);
    } else {
        editText.SetRawInputType (InputTypes.Null);
        editText.Focusable = true;
    }
}

Реализация:

editText.FocusChange+= (sender, e) => {
    DisableSoftKeyboard(editText);
};
Другие вопросы по тегам