Вимкнення подання редагування на повноекранному екрані для введення м'якої клавіатури в пейзаж?


237

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

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

Повний екран для редагування Android

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


Нехай спробують це побачити. Це добре для вас. [Подивіться на цей] [1] [1]: stackoverflow.com/questions/8648401 / ...
sonida

У мене аналогічна проблема :( Ви могли б мати будь-яку ідею? Stackoverflow.com/questions/36914290 / ...
railwanderer

2
як застосувати це протягом усього додатка. Ми не збираємось додавати значення атрибута у кожен редакційний текст у xml.
Вікас Пандей

2
Багато відповідей нижче рекомендують використовувати flagNoExtractUiабо IME_FLAG_NO_EXTRACT_UI. Однак у документації IME_FLAG_NO_EXTRACT_UI, що відповідає flagNoExtractUi, вказується, що "Використання цього прапора перешкоджає, і він може згодом застаріти", такий flagNoFullscreenваріант є рекомендованим.
ThomasW

Відповіді:


178

Нарешті я відповів на власне запитання:

Користувацький інтерфейс (тобто режим редагування на повноекранному екрані) можна відключити в точці, в якій підключено вхідне з'єднання:

@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {

    outAttrs.imeOptions = EditorInfo.IME_FLAG_NO_EXTRACT_UI;

    // etc.
}

215
просто помістіть у свій xml-файл android: imeOptions = "flagNoExtractUi"

1
jnic, де ти це переосмислив у коді м'якої клавіатури? SoftKeyboard.java? Я спробував те ж переопрацювання та помилку вийшов.

14
Ви, ймовірно, захочете додати прапор до параметрів замість того, щоб переосмислювати те, що коли-небудь варіанти передавались так:outAttrs.imeOptions |= EditorInfo.IME_FLAG_NO_EXTRACT_UI;
ObsidianX

2
@ user726518 як застосувати цей атрибут до елемента пошуку в панелі дій?
Менна-Аллах Самі

1
Єдине, що працювало під час використання користувальницького перегляду для обробки клавіатури. Дякую!
Герман

109

Для цього перейдіть до дії 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


64

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


1
Ця відповідь занадто коротка і не відповідає стандартам якості SO. Будь ласка, вдосконаліть його, додавши додаткові пояснення, щоб вони були корисними для громади, а не лише для ОП.
Лоренцо Донаті - Codidact.org

31
@LorenzoDonati - це саме те, що ти повинен зробити ... це дуже проста відповідь, оскільки рішення дуже просте, і це просто інший спосіб зробити це, ніж відповіді вище. Крім того, відповіді не можуть бути "занадто короткими", якщо вони не відповідають на питання, IMO.
Михайло Яворський

1
Вибачте, але це не те, що про це думає спільнота SO. Відповіді не повинні обмежуватися для вирішення проблеми ОП, вони повинні бути чудовими відповідями загалом. Дивіться це і це , наприклад.
Лоренцо Донаті - Codidact.org

22
@LorenzoDonati - це дуже специфічне питання, що має лише один кінцевий результат (але кілька способів вирішити його). Моя відповідь є доповненням до інших відповідей на цій сторінці. ВСІ відповіді на цій сторінці обмежуються лише "проблемою ОП", оскільки це єдиний вид відповіді, який можна написати. Як я вже казав, це специфічно і просто.
Михайло Яворський

2
нарешті, я знайшов відповідь. дякую тобі @mike yaworski
Drx

53

Відповідь вище допомогла мені знайти рішення для динамічно доданих EditTexts:

editText.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI);

37

Використовуйте android:imeOptions="flagNoFullscreen"для досягнення цієї функції.


1
приємний і кращий підхід писати в xml. Працює для мене. Спасибі
Ahesanali Suthar

1
Зауважте, що в документації на IME_FLAG_NO_EXTRACT_UI, якій відповідає flagNoExtractUi, вказується, що "Використання цього прапора перешкоджає, і він може згодом застаріти", такий flagNoFullscreenваріант є рекомендованим.
ThomasW

12

Крім того, якщо ви хочете поєднати декілька програм imOptions програмно, ви можете скористатися | синтаксис.

Наприклад, щоб вимкнути режим редагування повноекранного екрану в альбомному стилі та замінити клавішу "Далі" на клавішу "ОК" (ACTION_DONE) на клавіатурі, ви можете використовувати:

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

9

Якщо ви безпосередньо модифікуєте IME, ви можете запобігти його відображенню ExtractedView шляхом відміни onUpdateExtractingVisibility:

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

6

Я знаю, що це трохи пізно, але для тих, хто все ще зацікавлений, ось моє рішення: У моєму випадку я мав пейзажну активність, що містить редактор 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"  />

Ура!



2

Ви можете використовувати:

android:imeOptions="flagNoFullscreen" 

у вашому редакційному тексті


1
Це відповідь?
artgb

Я пробую це, і це працює на мене! (Мій пристрій андроїд 4.1.2)
Thientvse

0

Ви можете зателефонувати, щоб приховати м'яку клавіатуру та очистити фокус від перегляду пошуку.

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

super.clearFocus();
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.