Intereting Posts
Лучший редактор формата XML для Android, чем тот, что в Eclipse Использование светодиодной вспышки камеры с OpenCV на Android ViewPager как круговая очередь / упаковка Новый Android WebView работает так же, как CrossWalk WebView Статические ссылки очищаются – действительно ли Android разгружает классы во время выполнения, если они не используются? Можно ли расколоть растровое изображение на мелкие кусочки, не загружая все это в память? Действительно ли тестовая учетная запись Android Market взимается с покупки In-App? Android 6.0 Невозможно добавить WifiConfiguration, если уже есть еще одна WifiConfiguration для этого SSID Настройка android: animateLayoutChanges программно Могу ли я ссылаться на кнопку OnClickListener внутри слушателя? (андроид) Одновременно воспроизводите два видео в одном VideoView Содержимое веб-сайта Android не выбирается Android: Android 4.1 эмулятор, вызывающий onDateSet дважды из диалогового окна DatePicker Почему eclipse зависает при установке apk в эмулятор Android? Службы Google Location Services и службы поиска на Android

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();