Android: отключить мягкую клавиатуру на всех EditTexts

Я работаю над диалогом на Android с несколькими EditText . Я поместил эту строку в onCreate() , чтобы отключить мягкую клавиатуру:

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

Проблема в том, что она работает только тогда, когда диалог появляется и ничего не делает. Когда я перехожу к следующему EditText , клавиатура появляется и не опускается.

Кто-нибудь знает, как решить эту проблему?

Создайте свой собственный класс, который расширяет EditText и переопределяет onCheckIsTextEditor() :

 public class NoImeEditText extends EditText { public NoImeEditText(Context context, AttributeSet attrs) { super(context, attrs); } @Override public boolean onCheckIsTextEditor() { return false; } } 

Если вы посмотрите на реализацию метода onCheckIsTextEditor () (в TextView), это выглядит так:

 @Override public boolean onCheckIsTextEditor() { return mInputType != EditorInfo.TYPE_NULL; } 

Это означает, что вам не нужно подклассы, вы можете просто:

 ((EditText) findViewById(R.id.editText1)).setInputType(InputType.TYPE_NULL); 

Я пробовал настройку android: inputType = "none" в макете xml, но это не сработало для меня, поэтому я сделал это программно.

Попробуйте это.

 edittext.setInputType(InputType.TYPE_NULL); if (android.os.Build.VERSION.SDK_INT >= 11) { edittext.setRawInputType(InputType.TYPE_CLASS_TEXT); edittext.setTextIsSelectable(true); } 

Я искал решения для этого весь день, и я наткнулся на этот подход. Я помещаю его здесь, потому что он, кажется, полностью отвечает на этот вопрос.

 EditText et = ... // your EditText et.setKeyListener(null) //makes the EditText non-editable so, it acts like a TextView. 

Нет необходимости в подклассе. Основное отличие этого и сделать ваш EditText неактивным, заключается в том, что EditText по-прежнему имеет свой собственный указатель – вы можете выбрать текст и т. Д. Все, что он делает, это подавление IME от появления собственной мягкой клавиатуры.

Это было некоторое время с этого поста, но вот простой метод, который работал для меня: в xml, в свойствах EditText , выполните: android:focusable="false" . Теперь клавиатура не будет всплывать, даже если пользователь нажимает на нее. Это полезно, если вы предоставляете свою собственную клавиатуру.

Знайте его слишком поздно, но попробовали ли вы использовать следующий параметр EditText в своем макете?

 android:inputType="none" 

ОБНОВИТЬ

Использование,

 editText.setInputType(InputType.TYPE_NULL) editText.setFocusable(false) 

Вызовите TextView.setShowSoftInputOnFocus(false) . Этот метод документирован с уровня API 21, но он уже существует с уровня API 16 (он просто скрыт от JavaDoc). Я использую его с уровнем API 16 в AlertDialog в сочетании с dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN) .

В уровне API 14 есть скрытый метод setSoftInputShownOnFocus() который, похоже, имеет ту же цель, но я не тестировал это.

Преимущество над InputType.TYPE_NULL заключается в том, что могут использоваться все обычные типы ввода (например, для ввода пароля), а сенсорное событие позиционирует курсор в правильном месте в тексте.

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

Чтобы отключить XML-файл ANDROID SOFT INPUT KEYBOARD, в моем случае не помогает вызов метода setInputType объекта EditText в java-файле. Вот код.

 EditTextInputObj = (EditText) findViewById(R.id.EditTextInput); EditTextInputObj.setInputType(InputType.TYPE_NULL); 

Поместите это в метод Oncreate

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

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

 view.setDescendantFocusability(view.FOCUS_BLOCK_DESCENDANTS); 

По набору EditText focusable-> false, клавиатура не открывается при нажатии

 <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:focusable="false" /> 

Вы можете сделать это:

 textView.setOnClickListener(null); 

Он отключит клавиатуру для textView, и щелчок больше не будет работать.

Intereting Posts
Распознавание рукописного текста для изолированного арабского языка Не могу понять isFinishing GetDrawable () в TypedArray, возвращающем null? Android, намерение не работает? Даже я использую MenuItemCompat.setOnActionExpandListener, с которым работает приложение, советуем использовать MenuItemCompat.setOnActionExpandListener Как запустить консоль «telnet» в эмуляторе устройства Android Studio? Как я могу глобально настроить ориентацию экрана в Android? Retrofit 2 печатает пустой тело ответа в журнале с HttpLoggingInterceptor.Level.BODY Android 4 ICS Ice Cream Sandwich – iframe, который содержит форму Есть ли более быстрое решение для рендеринга видео, чем использование функций AndroidBitmap_xxx? Журналы отладки Android действительно удалены во время выполнения? Ошибка при добавлении платформы Android для телефонного разговора Android / Eclipse эмулятор, как стереть данные? Android EPSON therm Печать данных с веб-просмотра при нажатии? Если принтер не найден? Ошибка logcat для Android: ZipFileCache: init не удалось, когда открыт zip-файл – конкретное устройство?