105

I have a fairly complex (not really) xml layout file. One of the views is a LinearLayout (v1) with two children: an EditText(v2) and another LinearLayout(v3). The child LinearLayout in turn has an EditText(v4) and an ImageView(v5).

For EditText v2 I have imeOptions as

android:imeOptions="actionNext"

But when I run the app, the keyboard's return does not check to next and I want it to change to next. How do I fix this problem?

Also, when user clicks next, I want focus to go to EditText v4. I do I do this?

For those who really need to see some code:

<LinearLayout
        android:id="@+id/do_txt_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/col6"
        android:orientation="vertical"
        android:visibility="gone" >

        <EditText
            android:id="@+id/gm_title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="5dp"
            android:background="@drawable/coldo_text"
            android:hint="@string/enter_title"
            android:maxLines="1"
            android:imeOptions="actionNext"
            android:padding="5dp"
            android:textColor="pigc7"
            android:textSize="ads2" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="100dp"
            android:orientation="horizontal" >

            <EditText
                android:id="@+id/rev_text"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_gravity="center_vertical"
                android:layout_margin="5dp"
                android:layout_weight="1"
                android:background="@drawable/coldo_text"
                android:hint="@string/enter_msg"
                android:maxLines="2"
                android:padding="5dp"
                android:textColor="pigc7"
                android:textSize="ads2" />

            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_gravity="center_vertical"
                android:background="@drawable/colbtn_r”
                android:clickable="true"
                android:onClick=“clickAct”
                android:paddingLeft="5dp"
                android:paddingRight="5dp"
                android:src="@drawable/abcat” />
        </LinearLayout>
    </LinearLayout>
Katedral Pillon
  • 14,534
  • 25
  • 99
  • 199
  • I'm not sure this will work for views that are not siblings, but you can try adding `android:nextFocusDown="@id/edit_text_v4"` (also maybe try `android:nextFocusForward` or some of the other nextFocus attributes). – Karakuri Apr 12 '14 at 22:36
  • @Karakuri it didn't work. Notice that the next button is not showing up at all. The button is still the return button. – Katedral Pillon Apr 12 '14 at 22:43
  • 1
    @KatedralPillon Did you manage to solve it ? If yes then can u post your solution here ? I am facing the same issue. – h4ck3d May 30 '14 at 10:31

15 Answers15

225

Just add android:maxLines="1" & android:inputType="text" to your EditText. It will work!! :)

Mateus Gondim
  • 5,362
  • 6
  • 31
  • 51
Surendra Kumar
  • 2,787
  • 1
  • 12
  • 10
50

singleLine is deprecated. Adding an input type (eg: android:inputType="text") also worked for me.

Use android:maxLines="1" as singleLine is deprecated

blueware
  • 5,205
  • 1
  • 40
  • 60
pratnala
  • 3,723
  • 7
  • 35
  • 58
43

android:singleLine has been deprecated, it is better to combine android:maxLines="1" with android:inputType="text". This would be the code:

<EditText
        android:id="@+id/editText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:maxLines="1"
        android:inputType="text"
        />
voghDev
  • 5,641
  • 2
  • 37
  • 41
30

The answers given here were all very helpful, but I was still struggling to get my keyboard's "Next" to show.

Turns out that when you use Android's android:digits attribute in your XML, it prevents the android:imeOptions="actionNext" from working as expected.

The answer is actually to use the deprecated android:singleLine="True". This seems to force the IME Option to be respected.

Old, Non-Working Code

        <android.support.design.widget.TextInputEditText
            android:id="@+id/first_name"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ- "
            android:ellipsize="end"
            android:hint="@string/first_name"
            android:imeOptions="actionNext"
            android:inputType="textCapWords"
            android:maxLength="35"
            android:maxLines="1" />

Working Code

        <android.support.design.widget.TextInputEditText
            android:id="@+id/first_name"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ- "
            android:ellipsize="end"
            android:hint="@string/first_name"
            android:imeOptions="actionNext"
            android:inputType="textCapWords"
            android:maxLength="35"
            android:maxLines="1"
            android:singleLine="true" />

I'm not a fan of using a deprecated attribute, but for now it seems to get the desired result.

welshk91
  • 1,613
  • 18
  • 16
13

single line deprecated so you add below code I think inputType must.

        <EditText 
            android:inputType="text"
            android:maxLines="1"
            android:imeOptions="actionNext" />
Sudheesh R
  • 1,767
  • 3
  • 23
  • 43
Mani
  • 930
  • 10
  • 14
11

Finally i have got sure solution for this issue Just add these 3 lines in your edit text and it will be working fine

        android:maxLines="1"
        android:inputType="text"
        android:imeOptions="actionDone"

Here you can add maxLines according to your requirement. Do not use singleLine as it is deprecated now. Good luck!

Ali Nawaz
  • 2,016
  • 20
  • 30
10

These three lines are enough.

android:singleLine="true"
android:inputType="text"
android:imeOptions="actionNext"
Googlian
  • 6,077
  • 3
  • 38
  • 44
  • 2
    android:singleLine="true" has been deprecated since API Level 15 (https://developer.android.com/reference/android/R.attr.html#singleLine) Please use android:maxLines="1" instead. – ONE Dec 24 '20 at 16:30
8
android:inputType="text"

You have to specify an inputType in order for imeOptions to function.

paulb444
  • 494
  • 4
  • 6
7

below code is force

android:inputType="text"
Mehrdad
  • 1,477
  • 15
  • 17
6

Only this worked for me.

Change it:

android:maxLines="1"
android:inputType="text"
android:imeOptions="actionNext"

on that:

android:singleLine="true"
android:inputType="text"
android:imeOptions="actionNext"
Zakhar Rodionov
  • 1,398
  • 16
  • 18
5

Key here is to set input type and imeOptions attributes

<EditText 
   android:inputType="number"
   android:maxLines="1"
   android:imeOptions="actionSearch" />
Sudheesh R
  • 1,767
  • 3
  • 23
  • 43
pavan bangalala
  • 111
  • 1
  • 2
5

Only put in your EditText xml

android:inputType="text"
Liong
  • 1,324
  • 12
  • 18
4
<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/auth_register_re_password"
    android:hint="Enter Password Again"
    android:imeActionLabel="login"
    android:gravity="center"
    android:imeOptions="actionUnspecified"
    android:inputType="textPassword"
    android:maxLines="1"/>
saigopi.me
  • 14,011
  • 2
  • 83
  • 54
0

Add this following lines to in your EditText.

<Edittext
android:layout_height = "match_parent"
android:layout_widht = "match_parent"
android:inputType="text"
android:maxLines="1"
android:imeOptions="actionSearch"
android:imeActionLabel="Search"
android:hint = "Search Here" />
  • As it’s currently written, your answer is unclear. Please [edit] to add additional details that will help others understand how this addresses the question asked. You can find more information on how to write good answers [in the help center](/help/how-to-answer). – Community Jun 13 '22 at 14:51
0

Observation that i saw for this: When you call implicit keyboard for a particular input, the android checks whether keyboard was called for same input box previously or not.

If called for same input box just show the previous ime option for that input box or else check the ime option that is currently set and use it.

There is some kind of caching which is creating the problem.