Как заставить EditText, IME Action, textMultiLine работать с JellyBean

Я столкнулся с загадкой и не могу найти решение. По-видимому, JellyBean меняет способ обработки действий IME. Я нашел много веб-сайтов, предлагающих решение, которое действительно работает, но только для однострочного EditTexts. Пример: Stackoverflow: onEditorAction

Мои виджеты EditText работали отлично до JellyBean. Он будет правильно переносить слова, пока пользователь не нажмет клавишу «Готово» (возврат). Затем он перехватит событие с OnEditorActionListener и обработает его соответствующим образом. Я пробовал несколько вариантов изменения настроек со следующими атрибутами XML безрезультатно:

  • одноместныйПодкладка
  • прокруткаГоризонтально
  • тип ввода
  • imeOptions
  • линии

Я мог получить перенос слов только без запуска события onEditorAction или без переноса слов с запуском события onEditorAction. Как я могу получить перенос слов и одновременно обрабатывать клавишу ввода программной клавиатуры для JellyBean?

Обновление 1: Включая запрошенный код. Обратите внимание, что сейчас это работает для всех платформ, кроме JellyBean. Как я уже говорил ранее, пробовал несколько разных настроек XML безрезультатно.

Обновление 2: удалось заполучить Asus Transformer с JellyBean 4.1.1. Работает отлично. Так что, возможно, это ошибка конкретного устройства? Другое мое устройство JellyBean — это Nexus 7 с версией 4.1.2. Может ли кто-нибудь проверить это с другими устройствами?

Код:

private class OnMyEditorActionListener implements OnEditorActionListener {
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        if (actionId == EditorInfo.IME_ACTION_GO) {
            doSomething();
            return true;
        }
        return false;
    }
}
<EditText
    android:id="@+id/editbox_box_et"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@null"
    android:gravity="top|center_horizontal"
    android:imeOptions="actionGo"
    android:inputType="textMultiLine|textNoSuggestions"
    android:padding="@dimen/spacing_half"
    android:textSize="24sp" >
</EditText>

person Jay Soyer    schedule 05.11.2012    source источник
comment
Это может помочь показать код и цель вашей сборки.   -  person esse    schedule 10.11.2012
comment
Код включен. Цель — JellyBean.   -  person Jay Soyer    schedule 11.11.2012


Ответы (5)


Укажите идентификатор самостоятельно для кнопки отправки/перехода.

В действии:

private class OnMyEditorActionListener implements OnEditorActionListener {
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        if (actionId == R.id.your_new_ID || actionId == EditorInfo.IME_Null) {
            doSomething();
            return true;
        }
        return false;
    }
}

В XML:

<EditText
    android:id="@+id/editbox_box_et"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@null"
    android:gravity="top|center_horizontal"
    android:inputType="textMultiLine|textNoSuggestions"
    android:padding="@dimen/spacing_half"
    android:textSize="24sp" 
    android:imeActionId="@+id/your_new_ID"
    android:imeActionLabel="Go"> </EditText>
person Darpan    schedule 07.08.2014
comment
Это было на самом деле очень полезно, решило мою проблему. Я бы дал тебе печенье, если бы мог. - person ; 28.10.2014
comment
Кажется, это работает нормально. Многострочная функциональность сохранена, и теперь я могу обозначить и обработать клавишу ввода так, как захочу. Легкий и эффективный. Есть еще несколько исправлений, связанных с той же проблемой, в stackoverflow.com/questions/5014219/ - person speedynomads; 22.12.2014

попробуйте следующее:

android:inputType="text"
android:imeOptions="actionNone"

а также ознакомьтесь с различными вариантами переноса слов в файле imeOptions xml

person G M Ramesh    schedule 15.11.2012
comment
Отрицательный. Текст, actionNone не работает. Я уже пробовал несколько вариантов с текстом, textMultiLine и textImeMultiLine. Наряду с actionNone, actionGo, actionDone и flagNoEnterAction. Кажется, на Nexus 7 ничего не работает. - person Jay Soyer; 15.11.2012

После долгих тестов я определил, что это ошибка, специфичная для Nexus 7, и я ничего не могу сделать, чтобы обойти ее. Интересно, если я скачаю другую клавиатуру из Google Play, то код действительно работает!

person Jay Soyer    schedule 16.11.2012
comment
Дополнительное примечание: похоже, что создатели программных клавиатур не обязаны поддерживать опцию ime по определению. Это объясняет, почему они не отображаются на некоторых клавиатурах. Поэтому я думаю, что полагаться на них как на неотъемлемую часть приложения — не очень хорошая идея. - person AgentKnopf; 29.01.2013

Попробуйте добавить атрибут android:imeActionId с целочисленным значением (2 для actionGo). http://developer.android.com/reference/android/widget/TextView.html#attr_android:imeOptions

person alexeyk    schedule 12.11.2012

У меня возникла проблема с запуском события для Jelly Bean 4.1.2. Добавление типа ввода помогло мне.

android:imeOptions="actionGo"
android:inputType="text"
person bsr    schedule 12.11.2012
comment
Это не позволяет перенос слов. - person Jay Soyer; 14.11.2012