2010-12-02 2 views
186

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

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

Android fullscreen editing view

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

+0

Попробуйте его увидеть. Это хорошо для тебя. [Посмотрите на этот] [1] [1]: http://stackoverflow.com/questions/8648401/how-to-open-only-half-keyboard-in-landscape-mode – sonida 2013-06-24 02:33:13

+0

я имеют аналогичную проблему :(у вас может быть какая-то идея? http://stackoverflow.com/questions/36914290/android-soft-keyboard-in-a-fullscreen-surface-view – railwanderer 2016-04-28 12:38:50

+2

как применить это на протяжении всего приложения. Мы не собираются добавлять значение атрибута в каждый edittext в xml. – 2016-09-12 10:05:21

ответ

146

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

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

@Override 
public InputConnection onCreateInputConnection(EditorInfo outAttrs) { 

    outAttrs.imeOptions = EditorInfo.IME_FLAG_NO_EXTRACT_UI; 

    // etc. 
} 
+169

просто просто помещает в ваш XML-файл android: imeOptions = "flagNoExtractUi" – 2011-04-27 04:28:36

+1

jnic, где вы это сделали, переопределяя в коде мягкой клавиатуры? SoftKeyboard.java? Я пробовал одно и то же переопределение и ошибку. – 2011-04-27 05:08:02

44

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

editText.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI); 
80

Для этого просто перейдите к активности xml и вставьте android:imeOptions="flagNoExtractUi" в свой код. Хм довольно просто - но где hac его нужно вставить? Есть взглянуть на код примера деятельности 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

7

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

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

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

28

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

9

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

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

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

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

android:imeOptions="flagNoFullscreen" 
в вашем EditText

0

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

Ура!

Смежные вопросы