How to get EditText, IME Action, textMultiLine, to work for JellyBean

Jay Soyer picture Jay Soyer · Nov 5, 2012 · Viewed 15.5k times · Source

I've run into quite the conundrum and am failing to find a solution. Apparently JellyBean changes how IME actions are handled. I've found many websites offering a solution which indeed works but only for single lined EditTexts. Example: Stackoverflow: onEditorAction

My EditText widgets worked perfectly until JellyBean. It would properly word-wrap until the user hit the "Done" (return) key. Then it'd catch the event with the OnEditorActionListener and process accordingly. I've tried multiple variations of changing the settings with the following XML attributes to no avail:

  • singleLined
  • scrollHorizontally
  • inputType
  • imeOptions
  • lines

I could only get word-wrapping with no onEditorAction event fired or no word-wrapping with the onEditorAction event firing. How can I get word-wrapping and handle the softkeyboard enter key at the same time for JellyBean?

Update 1: Including requested code. Note this is how it stands now which works for all platforms except JellyBean. As I said earlier, tried multiple different XML settings to no avail.

Update 2: Managed to get a hold of an Asus Transformer running JellyBean 4.1.1. Works fine. So perhaps this is a device specific bug? My other JellyBean device is a Nexus 7 running 4.1.2. Can anyone verify this with other devices?

Code:

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>

Answer

Darpan picture Darpan · Aug 7, 2014

Provide an ID by yourself to your submit/go button

In activity:

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;
    }
}

In 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>