Отключение полноэкранного редактирования вида для мягкой входной клавиатуры в ландшафте?

StackOverflow https://stackoverflow.com/questions/4336762

Вопрос

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

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

Android fullscreen editing view

Отредактировано для добавления: Вид, к которому происходит вход, не является TextView (это View с таможностью InputConnection Реализация), так android:imeOptions="flagNoExtractUi" не будет работать здесь.

Это было полезно?

Решение

я наконец ответил на мой вопрос:

Экстракт UI (т.е. режим полноэкранного редактирования) может быть отключен в точке, на котором подключение к подключению:

@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.

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

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

editText.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI);

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

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

Например, для того, чтобы отключить полноэкранный вид редактирования в ландшафте и заменить «следующий» ключ от «OK» (ACTE_DONE) в клавиатуре, вы можете использовать:

editText.setImeOptions(EditorInfo.IME_ACTION_DONE | EditorInfo.IME_FLAG_NO_EXTRACT_UI);

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

@Override
public void onUpdateExtractingVisibility(EditorInfo ei) {
    ei.imeOptions |= EditorInfo.IME_FLAG_NO_EXTRACT_UI;
    super.onUpdateExtractingVisibility(ei);
}

Я знаю, что это немного поздно, но для тех, кто все еще заинтересован, вот мое решение: в моем случае у меня был пейзаж Деятельность содержащий АН Редактировать текст Наверху и мне нужно было реализовать функцию автозаполнения в этом поискоре Деятельность, который перекрывающаяся клавиатура вызвала проблему, которую пользователь не мог видеть результат RecyClerview.Отказ Так что я закончил иметь это Редактировать текст В моей макете:

<EditText
  android:layout_width="match_parent"
  android:layout_height="?actionBarSize"
  android:id="@+id/main_search_et"
  android:imeOptions="actionSearch|flagNoExtractUi"
  android:inputType="text"  />

Ваше здоровье!

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

android:imeOptions="flagNoFullscreen" 

В вашем Edittext.

Мое решение:

android:imeOptions="flagNoExtractUi|flagNoFullscreen"

Вы можете позвонить, чтобы скрыть мягкую клавиатуру и очистить фокус из SearchView.

public void hideKeyboard(View view) {
    InputMethodManager imm = (InputMethodManager) view.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}

super.clearFocus();
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top