Отключение полноэкранного режима редактирования для ввода с помощью мягкой клавиатуры в альбомной ориентации?
на устройствах Android, которые используют мягкие клавиатуры, я хочу, чтобы полноэкранный режим редактирования клавиатуры (показано ниже) не появлялся в ландшафтном режиме (т. е. я хочу видеть только саму мягкую клавиатуру и мой взгляд за ней).
Я предполагаю, что это может быть достигнуто с помощью setExtractViewShown(false)
метод on InputMethodService
, но я не могу получить доступ к экземпляру по умолчанию этой и не хочу, чтобы реализовать пользовательский метод ввода.
редактировать, чтобы добавить: представление, к которому идет ввод, не является TextView
(это View
с пользовательским InputConnection
реализация), поэтому android:imeOptions="flagNoExtractUi"
не будет работать здесь.
11 ответов:
Я наконец-то ответил на мой собственный вопрос:
пользовательский интерфейс извлечения (т. е. полноэкранный режим редактирования) может быть отключен в точке, в которой подключено входное соединение:
@Override public InputConnection onCreateInputConnection(EditorInfo outAttrs) { outAttrs.imeOptions = EditorInfo.IME_FLAG_NO_EXTRACT_UI; // etc. }
для этого просто перейдите к действию xml и вставьте
android:imeOptions="flagNoExtractUi"
в коде. Хм довольно просто - но куда ВАК его надо вставить? Посмотрите на код примера активности xml и посмотрите на EditText:<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <EditText android:imeOptions="flagNoExtractUi" android:id="@+id/etTextInAct" android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10" > <requestFocus /> </EditText> </LinearLayout>
Если вы хотите больше вариантов настройки для клавиатуры см. http://developer.android.com/guide/topics/ui/controls/text.html
ответ выше помог мне выяснить, решение для динамически добавляемых EditTexts:
editText.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI);
кроме того, если вы хотите объединить несколько imeOptions programaticaly, вы можете использовать синтаксис|.
например, чтобы отключить полноэкранный режим редактирования в альбомной ориентации и заменить клавишу" Next " на " OK " (ACTION_DONE) на клавиатуре, вы можете использовать:
editText.setImeOptions(EditorInfo.IME_ACTION_DONE | EditorInfo.IME_FLAG_NO_EXTRACT_UI);
Если вы изменяете IME напрямую, вы можете запретить ему когда-либо отображать ExtractedView путем переопределения
onUpdateExtractingVisibility
:@Override public void onUpdateExtractingVisibility(EditorInfo ei) { ei.imeOptions |= EditorInfo.IME_FLAG_NO_EXTRACT_UI; super.onUpdateExtractingVisibility(ei); }
Я знаю, что это немного поздно, но для тех, кто еще интересует, то вот мое решение : В моем случае у меня был пейзаж активность содержащий EditText в нем и мне нужно реализовать функцию автозаполнения в поиске активность, что перекрывающаяся клавиатура вызвала проблему, которую пользователь не мог видеть результат RecyclerView. Так что я в конечном итоге это EditText в моем макет:
<EditText android:layout_width="match_parent" android:layout_height="?actionBarSize" android:id="@+id/main_search_et" android:imeOptions="actionSearch|flagNoExtractUi" android:inputType="text" />
Ура!
вы можете позвонить, чтобы скрыть мягкую клавиатуру и очистить фокус от searchview.
public void hideKeyboard(View view) { InputMethodManager imm = (InputMethodManager) view.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(view.getWindowToken(), 0); } super.clearFocus();