Intereting Posts
Конечная дата больше, чем андроид проверки даты начала Android Media Player не будет воспроизводиться после остановки Недопустимый параметр макета в RelativeLayout: layout_weight Защита приложения от декомпиляции путем скрытия манифеста и преобразования кода в символ Unicode Как установить высоту элемента AlertDialog? Ошибка Android «Нет такого файла или каталога»? Скрытие изображений, которые не загружались Активность мигает после изменения локали в Android 4.1+ Как перенаправить пользователя на вкладку обзора страницы приложения в Google Play из браузера? Блокировать анимацию по умолчанию для startActivity INSTALL_FAILED_CONFLICTING_PROVIDER с помощью SDK для Facebook, когда я создаю несколько продуктов. Сохранение чисел с плавающей запятой в базе данных android Каков наилучший способ объявить компонент UI в Android с Kotlin? ClassCastException: android.widget.LinearLayout $ LayoutParams Как установить новый администратор

Android: как постоянно и полностью НЕ показывать по умолчанию мягкую клавиатуру для EditText?

У меня есть три поля EditText в действии, для двух из которых обычные методы ввода (жесткие клавиши, стандартная программная клавиатура) в порядке. Но для одного из блоков EditText я хочу отправить мягкий ввод только с пользовательского вида клавиатуры. Поэтому по сути я хочу, чтобы по умолчанию для этой EditText не отображалась стандартная мягкая клавиатура. Я попробовал добавить onTouchListeners и onFocusChange слушателей для EditText с частичным успехом вроде этого:

public boolean onTouch(View v, MotionEvent event) { v.requestFocus(); imm.toggleSoftInput(0, 0); return true; } public void onFocusChange(View v, boolean hasFocus) { InputMethodManager imm = (InputMethodManager)context.getSystemService(Context.INPUT_METHOD_SERVICE); if (imm.isActive(v)) { imm.toggleSoftInput(0,0); } } 

Но я не достиг окончательного решения, потому что

1) стандартная мягкая клавиатура всегда кратковременно мигает до того, как слушатель скрывает ее

2) в некоторых случаях, например, перемещение фокуса в EditText с помощью клавиш со стрелками клавиатуры иногда устанавливает видимую по умолчанию мягкую клавиатуру

и так далее.

Поэтому я хотел бы найти простой способ сказать Android никогда не показывать стандартную мягкую клавиатуру для этого конкретного EditText. Я не хотел бы расширять EditText и начинать переопределять материал, так как функциональность EditText идеально подходит для меня – я просто хочу, чтобы по умолчанию не была показана экранная клавиатура по умолчанию.

Я потратил несколько дней, пытаясь понять это. Некоторые темы (в том числе и некоторые из них), найденные через google, имеют наполовину попытки этой проблемы, но до сих пор я не нашел ни одного полностью функционального решения.

РЕДАКТИРОВАТЬ:

Я действительно начинаю раздражаться. Я решил попробовать не использовать EditText, но любой другой вид, который выполнит эту работу. Оказывается, очень сложно избавиться от этой мягкой клавиатуры. Он даже появляется, когда я использую жесткие клавиши для перемещения фокуса с EditText на кнопку! Почему на экране должна отображаться мягкая клавиатура на каждом freakin View, который имеет фокус? Даже когда я явно говорю inputType = "none"? Как отключить эту * мягкую клавиатуру? Ниже приведен xml для кнопки – давайте использовать это в качестве примера:

 <Button android:id="@+id/OkButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:inputType="none" android:paddingRight="5mm" android:paddingLeft="5mm" android:layout_below="@id/Volume" android:layout_alignParentLeft="true" android:text="OK"/> для <Button android:id="@+id/OkButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:inputType="none" android:paddingRight="5mm" android:paddingLeft="5mm" android:layout_below="@id/Volume" android:layout_alignParentLeft="true" android:text="OK"/> 

EDIT2:

У меня есть решение, которое, похоже, работает. Сначала я ухватился за InputMethodManager:

 this.imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); 

И я установил OnClickListener, OnTouchListener и OnFocusChange listener, все вызовут следующий метод, когда я хочу, чтобы EditText был сфокусирован, и мой пользовательский KeyboardView был видимым, а скрытый по умолчанию мягкий вход:

 private boolean makeActive(View v) { imm.hideSoftInputFromWindow(v.getWindowToken(), 0); EditText e = (EditText) v; int iType = e.getInputType(); e.setInputType(InputType.TYPE_NULL); e.requestFocus(); showKb(); e.setInputType(iType); return true; } 

 ((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE)) .hideSoftInputFromWindow(searchBox.getWindowToken(), 0); 

Где SearchBox – это ваше текстовое поле или еще лучше, а SearchBox – ваше текущее отображаемое окно.

Или попробуйте:

 InputMethodManager imm = (InputMethodManager)getBaseContext() .getSystemService(Context.INPUT_METHOD_SERVICE); imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,InputMethodManager.HIDE_IMPLICIT_ONLY); 

Где контекст getApplicationContext();