Отключение полноэкранного редактирования вида для мягкой входной клавиатуры в ландшафте?
-
30-09-2019 - |
Вопрос
На устройствах Android, которые используют программные клавиатуры, я хочу предотвратить появление редактирования полноэкранной клавиатуры (показано ниже), когда в ландшафтном режиме (т.е. я хочу видеть только саму мягкую клавиатуру и мой вид за ним).
Я предполагаю, что это может быть достигнуто с помощью setExtractViewShown(false)
метод включения InputMethodService
, но я не могу получить доступ к экземпляру по умолчанию и не хочу реализовывать пользовательский метод ввода.
Отредактировано для добавления: Вид, к которому происходит вход, не является 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();