Как предотвратить отображение виртуальной клавиатуры при длительном нажатии на виджет EditText?

#android

#Android

Вопрос:

В моем приложении есть виджет EditText, который я установил только для чтения, и я хочу знать, когда пользователь долго нажимает на него. Я не хочу, чтобы виртуальная клавиатура всплывала, если пользователь нажимает на этот виджет.

Чтобы остановить отображение виртуальной клавиатуры, я использую это:

EditText text = (EditText)findViewById(R.id.editText01); EditText.setClickable(false);

Это работает, но я не могу получать сообщения о длительном нажатии, если я использую OnLongClickListener().

Кто-нибудь знает, как я могу предотвратить появление всплывающей клавиатуры, но при этом получать события длительного нажатия?

Спасибо.

ОТРЕДАКТИРОВАНО: я действительно попробовал первые два ответа, предоставленные на этот вопрос, и ни один из них не сработал. В итоге я сделал следующее: для виджета EditText я использовал следующее:

 editText.setInputType(InputType.TYPE_NULL);
editText.setCursorVisible(false);
editText.setOnLongClickListener(mOnLongClickListener);
  

Вызов метода setInputType() отключает щелчки по виджету. Процедура setOnLongClickListener() будет обрабатывать все события длительного нажатия в виджете, и я возвращаю true из этой процедуры, которая в основном использует событие длительного нажатия. Итак, теперь у меня есть виджет EditText, при нажатии на который не будет всплывать виртуальная клавиатура, но длительное нажатие на этот виджет вызовет мой метод прослушивания.

Ответ №1:

 button.setOnLongClickListener (View.OnLongClickListener l(){

//override the method  

//then do this

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);
});
  

Ответ №2:

Попробуйте использовать это и доступные опции.

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

Моя проблема заключалась в том, что при запуске моей активности автоматически появлялся kepyboard, если есть EditText. Итак, я использовал приведенное выше в onCreate(). Попробуйте использовать другие параметры вместо «.SOFT_INPUT_STATE_ALWAYS_HIDDEN»