Отключить полноэкранный режим редактирования для ввода с программной клавиатуры в альбомной ориентации? - PullRequest
220 голосов
/ 02 декабря 2010

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

Я предполагаю, что это может быть достигнуто с помощью метода setExtractViewShown(false) на InputMethodService, но я не могу получить доступ к экземпляру этого по умолчанию и не хочу реализовывать пользовательский метод ввода.

Android-полноэкранное редактирование

Отредактировано, чтобы добавить: представление, к которому идет ввод, не является TextView (это View с пользовательской реализацией InputConnection), поэтому android:imeOptions="flagNoExtractUi" won 'здесь не работает.

Ответы [ 11 ]

163 голосов
/ 18 января 2011

I наконец-то ответил на мой собственный вопрос:

Пользовательский интерфейс извлечения (т. Е. Полноэкранный режим редактирования) можно отключить в точке подключения входного соединения:

@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {

    outAttrs.imeOptions = EditorInfo.IME_FLAG_NO_EXTRACT_UI;

    // etc.
}
94 голосов
/ 01 ноября 2012

Для этого перейдите к действию 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

62 голосов
/ 04 ноября 2013

добавьте свойство android:imeOptions="flagNoExtractUi" к каждому EditText в вашем XML файле.

50 голосов
/ 18 октября 2012

Ответ выше помог мне найти решение для динамически добавляемых EditTexts:

editText.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI);
37 голосов
/ 25 апреля 2014

Используйте android:imeOptions="flagNoFullscreen" для достижения этой функции.

11 голосов
/ 08 марта 2016

Кроме того, если вы хотите объединить несколько imeOptions программно, вы можете использовать |синтаксис.

Например, чтобы отключить полноэкранный режим редактирования в альбомной ориентации и заменить клавишу «Далее» на «ОК» (ACTION_DONE) на клавиатуре, вы можете использовать:

editText.setImeOptions(EditorInfo.IME_ACTION_DONE | EditorInfo.IME_FLAG_NO_EXTRACT_UI);
9 голосов
/ 04 декабря 2012

Если вы изменяете IME напрямую, вы можете предотвратить отображение ExtractedView, переопределив onUpdateExtractingVisibility:

@Override
public void onUpdateExtractingVisibility(EditorInfo ei) {
    ei.imeOptions |= EditorInfo.IME_FLAG_NO_EXTRACT_UI;
    super.onUpdateExtractingVisibility(ei);
}
5 голосов
/ 16 декабря 2017

Я знаю, что уже немного поздно, но для тех, кто все еще заинтересован, вот мое решение: В моем случае у меня был пейзаж Activity , содержащий EditText поверх него, и мне нужно было реализовать функцию автозаполнения в этом поиске Activity , что вызвало наложение клавиатуры проблема, из-за которой пользователь не мог видеть результат 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"  />

Ура!

2 голосов
/ 17 сентября 2018

Мое решение:

android:imeOptions="flagNoExtractUi|flagNoFullscreen"
2 голосов
/ 27 сентября 2017

Вы можете использовать:

android:imeOptions="flagNoFullscreen" 

в вашем тексте редактирования

...