Wechseln Sie zu einem anderen EditText, wenn Sie auf Android auf Soft Keyboard Next klicken

216

Wenn ich auf "Weiter" drücke, muss der Fokus auf den User EditText auf das Passwort verschoben werden. Dann muss es vom Passwort nach rechts und so weiter verschoben werden. Können Sie mir beim Codieren helfen?

Geben Sie hier die Bildbeschreibung ein

<LinearLayout
    android:id="@+id/LinearLayout01"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >

    <TextView
        android:id="@+id/username"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="User Name*" />

    <EditText
        android:id="@+id/txt_User"
        android:layout_width="290dp"
        android:layout_height="33dp"
        android:singleLine="true" />

</LinearLayout>


<LinearLayout
    android:id="@+id/LinearLayout02"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >

    <TextView
        android:id="@+id/password"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Password*" />

    <EditText
        android:id="@+id/txt_Password"
        android:layout_width="290dp"
        android:layout_height="33dp"
        android:singleLine="true"
        android:password="true" />

    <TextView
        android:id="@+id/confirm"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Password*" />

    <EditText
        android:id="@+id/txt_Confirm"
        android:layout_width="290dp"
        android:layout_height="33dp"
        android:singleLine="true"
        android:password="true" />

</LinearLayout>
androidBoomer
quelle
1
Werfen Sie einen Blick auf Android: imeOptions
Tobrun
Wo soll ich diesen Code ablegen?
androidBoomer

Antworten:

472

Fokusbehandlung

Die Fokusbewegung basiert auf einem Algorithmus, der den nächsten Nachbarn in einer bestimmten Richtung findet. In seltenen Fällen entspricht der Standardalgorithmus möglicherweise nicht dem beabsichtigten Verhalten des Entwicklers.

Ändern Sie das Standardverhalten der Richtungsnavigation mithilfe der folgenden XML-Attribute:

android:nextFocusDown="@+id/.."  
android:nextFocusLeft="@+id/.."    
android:nextFocusRight="@+id/.."    
android:nextFocusUp="@+id/.."  

Neben der Richtungsnavigation können Sie auch die Tab-Navigation verwenden. Dafür müssen Sie verwenden

android:nextFocusForward="@+id/.."

Rufen Sie an, um eine bestimmte Ansicht in den Fokus zu rücken

view.requestFocus()

Verwenden Sie a, um bestimmte sich ändernde Fokusereignisse anzuhören View.OnFocusChangeListener


Tastaturtaste

Sie können android:imeOptionsdiese zusätzliche Taste auf Ihrer Tastatur verwenden.

Zusätzliche Funktionen, die Sie in einem IME aktivieren können, der einem Editor zugeordnet ist, um die Integration in Ihre Anwendung zu verbessern. Die Konstanten hier entsprechen denen, die durch imeOptions definiert sind.

Die Konstanten von imeOptions enthalten eine Vielzahl von Aktionen und Flags. Die Werte finden Sie unter dem obigen Link.

Wertbeispiel

ActionNext :

Die Aktionstaste führt eine "nächste" Operation aus und führt den Benutzer zum nächsten Feld, in dem Text akzeptiert wird.

ActionDone :

Die Aktionstaste führt eine "erledigt" -Operation aus. Dies bedeutet normalerweise, dass nichts mehr eingegeben werden muss und der IME geschlossen wird.

Codebeispiel:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <EditText
        android:id="@+id/editText1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="32dp"
        android:layout_marginTop="16dp"
        android:imeOptions="actionNext"
        android:maxLines="1"
        android:ems="10" >

        <requestFocus />
    </EditText>

    <EditText
        android:id="@+id/editText2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/editText1"
        android:layout_below="@+id/editText1"
        android:layout_marginTop="24dp"
        android:imeOptions="actionDone"
        android:maxLines="1"
        android:ems="10" />

</RelativeLayout>

Wenn Sie Bedrohungsereignisse anhören möchten, verwenden Sie a TextView.OnEditorActionListener.

editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        if (actionId == EditorInfo.IME_ACTION_SEARCH) {
            performSearch();
            return true;
        }
        return false;
    }
});

Tobrun
quelle
20
In meinem Fall android:nextFocusForward="@+id/.."hat der Trick getan.
Mr. Moustard
23
Ich habe android:imeOptions="actionNext"alle meine EditTexts eingestellt und das Problem ist weg. Vielen Dank.
Joaquin Iurchuk
3
Ich musste für jeden EditText sowohl Joaquin als auch Mr. Moustards verwenden.
Scott Biggs
9
Für meine App hat es nicht funktioniert, nur Android zu verwenden: imeOptions = "actionNext". Der EditText benötigte android: inputType = "[etwas]", bevor er das imeOptions-Flag abhören würde.
Chris Kelly
4
Woher weiß es, auf welches fokussiert werden soll, wenn NEXT gedrückt wird? Überprüft es das "Recht" und dann das "Ab"? Gibt es eine Funktion, mit der die ID der nächsten Ansicht fokussiert werden kann, wenn der Benutzer die Taste NEXT drücken würde?
Android-Entwickler
66
android:inputType="text"

sollte den gleichen Effekt bringen. Nach dem Schlagen als nächstes, um den Fokus auf das nächste Element zu bringen.

android:nextFocusDown="@+id/.."

Verwenden Sie diese Option zusätzlich, wenn Sie nicht möchten, dass die nächste Ansicht den Fokus erhält

Matthias H.
quelle
34

Fügen Sie Ihren editText hinzu

android:imeOptions="actionNext"
android:singleLine="true"

Fügen Sie der Aktivität im Manifest eine Eigenschaft hinzu

    android:windowSoftInputMode="adjustResize|stateHidden"

In der Layoutdatei wird ScrollView als Root- oder übergeordnetes Layout für alle Benutzeroberflächen festgelegt

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.ukuya.marketplace.activity.SignInActivity">

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

       <!--your items-->

    </ScrollView>

</LinearLayout>

Wenn Sie nicht jedes Mal möchten, wenn es hinzugefügt wird, erstellen Sie einen Stil: Fügen Sie einen Stil in values ​​/ style.xml hinzu

Standardstil:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="editTextStyle">@style/AppTheme.CustomEditText</item>
    </style>

<style name="AppTheme.CustomEditText"     parent="android:style/Widget.EditText">
        //...
        <item name="android:imeOptions">actionNext</item>
        <item name="android:singleLine">true</item>
    </style>
Abror Esonaliyev
quelle
Verwendung android:singleLine="true"ist entzogen.
Praveenkumar
18

Verwenden Sie die folgende Zeile

android:nextFocusDown="@+id/parentedit"

parenteditist die ID des nächsten EditTextzu fokussierenden.

Die obige Zeile benötigt auch die folgende Zeile.

android:inputType="text"

oder

android:inputType="number"

Vielen Dank für den Vorschlag @Alexei Khlebnikov.

Federbrecher
quelle
3
Es hat bei mir funktioniert. Zusammen mit android:inputType="text"oder android:inputType="number".
Alexei Khlebnikov
Wenn nextFocusDown nicht funktioniert, verwenden Sie nextFocusForward. Es hat mir geholfen
Kishan Solanki
android: nextFocusDown = "@ + id / parentedit" hat bei mir funktioniert! danke
DIRTY DAVE
12
android:inputType="textNoSuggestions"
android:imeOptions="actionNext"
android:singleLine="true"
android:nextFocusForward="@+id/.."

Zusätzliches Feld hinzufügen

android: inputType = "textNoSuggestions"

hat in meinem Fall funktioniert!

Tripathee Gaurav
quelle
9
<AutoCompleteTextView
                android:id="@+id/email"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:drawableLeft="@drawable/user"
                android:hint="@string/username"
                android:inputType="text"
                android:maxLines="1"
                android:imeOptions="actionNext"
                android:singleLine="true" />

Diese drei Linien machen die Magie

            android:maxLines="1"
            android:imeOptions="actionNext"
            android:singleLine="true"
Hitesh Kushwah
quelle
6

Beachten Sie in Ihrem onEditorAction-Handler, dass Sie einen Booleschen Wert zurückgeben müssen, der angibt, ob Sie die Aktion ausführen (true) oder ob Sie eine Logik angewendet haben und das normale Verhalten (false) wünschen, wie im folgenden Beispiel:

EditText te = ...
te.setOnEditorActionListener(new OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event){
        if (actionId == EditorInfo.IME_ACTION_NEXT) {
            // Some logic here.
            return true; // Focus will do whatever you put in the logic.
        }
        return false;  // Focus will change according to the actionId
    }
});

Ich fand dies, als ich nach Ausführung meiner Logik true zurückgab, da sich der Fokus nicht bewegte.

user3701500
quelle
3

Verwenden Sie einfach den folgenden Code, es funktioniert einwandfrei und verwenden Sie inputType für jeden Edittext. Die nächste Schaltfläche wird auf der Tastatur angezeigt.

android:inputType="text" or android:inputType="number" etc
Pawan Kumar
quelle
2

In einigen Fällen müssen Sie den Fokus möglicherweise manuell auf das nächste Feld verschieben:

focusSearch(FOCUS_DOWN).requestFocus();

Dies ist möglicherweise erforderlich, wenn Sie beispielsweise über ein Textfeld verfügen, in dem beim Klicken eine Datumsauswahl geöffnet wird, und der Fokus automatisch zum nächsten Eingabefeld verschoben werden soll, sobald der Benutzer ein Datum ausgewählt und die Auswahl geschlossen hat. Es gibt keine Möglichkeit, dies in XML zu handhaben, es muss programmgesteuert erfolgen.

fehlerhaft
quelle
2

Einfacher Weg, wenn Sie nur wenige Felder einzeln haben:

Müssen einstellen

android:maxLines="1"

android:imeOptions="actionNext"

android:inputType="" <- Legen Sie Ihren Texttyp fest, in anderen Fällen ist er mehrzeilig und verhindert, dass der nächste Text angezeigt wird

Stichprobe:

<EditText android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:textSize="@dimen/text_large"
              android:maxLines="1"
              android:inputType="textEmailAddress"
              android:imeOptions="actionNext"
              android:layout_marginLeft="@dimen/element_margin_large"
              android:layout_marginRight="@dimen/element_margin_large"
              android:layout_marginTop="0dp"/>
PsyhoLord
quelle
2

Versuchen Sie es mit android: imeOptions = "actionNext" -Tag für jeden editText in der Ansicht, der automatisch auf den nächsten Edittext fokussiert wird, wenn Sie auf dem SoftKeyboard auf Weiter klicken.

Kuldeep Rathee
quelle
1
<?xml version="1.0" encoding="utf-8"?>

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ScrollView01"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true"
android:scrollbars="vertical" >

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="666dp"
android:background="#1500FFe5"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin" >
<TextView
    android:id="@+id/TextView02"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/editGrWt"
    android:layout_marginTop="14dp"
    android:layout_toLeftOf="@+id/textView3"
    android:ems="6"
    android:text="    Diamond :"
    android:textColor="@color/background_material_dark"
    android:textSize="15sp" />
  <EditText
    android:id="@+id/editDWt"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBottom="@+id/TextView02"
    android:layout_alignLeft="@+id/editGrWt"
    android:background="@color/bright_foreground_inverse_material_light"
    android:ems="4"
    android:hint="Weight"
    android:inputType="numberDecimal"
    android:nextFocusLeft="@+id/editDRate"
    android:selectAllOnFocus="true"
    android:imeOptions="actionNext"

    />
 <requestFocus />


<TextView
    android:id="@+id/TextView03"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/TextView02"
    android:layout_below="@+id/TextView02"
    android:layout_marginTop="14dp"
    android:ems="6"
    android:text="    Diamond :"
    android:textColor="@color/background_material_dark"
    android:textSize="15sp" />

<EditText
    android:id="@+id/editDWt1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@+id/TextView03"
    android:layout_alignBottom="@+id/TextView03"
    android:layout_alignLeft="@+id/editDWt"
    android:background="@color/bright_foreground_inverse_material_light"
    android:ems="4"
    android:hint="Weight"
    android:inputType="numberDecimal"
    android:text="0"
    android:selectAllOnFocus="true"
    android:imeOptions="actionNext"/>
 <requestFocus />

<TextView
    android:id="@+id/TextView04"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/editDWt1"
    android:layout_marginTop="14dp"
    android:layout_toLeftOf="@+id/textView3"
    android:ems="6"
    android:text="         Stone :"
    android:textColor="@color/background_material_dark"
    android:textSize="15sp" />

<EditText
    android:id="@+id/editStWt1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@+id/TextView04"
    android:layout_alignBottom="@+id/TextView04"
    android:layout_alignLeft="@+id/editDWt1"
    android:background="@color/bright_foreground_inverse_material_light"
    android:ems="4"
    android:hint="Weight"
    android:inputType="numberDecimal"
    android:nextFocusForward="@+id/editStRate1"
    android:imeOptions="actionNext" />
 <requestFocus />
  <TextView
     android:id="@+id/TextView05"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:layout_alignLeft="@+id/TextView04"
     android:layout_below="@+id/editStRate1"
     android:layout_marginTop="14dp"
     android:ems="6"
     android:text="         Stone :"
     android:textColor="@color/background_material_dark"
     android:textSize="15sp" />


</RelativeLayout>

</ScrollView>
Nilkanth vithani
quelle
4
Vielleicht möchten Sie Ihrer Antwort eine Erklärung hinzufügen, um zu erklären, warum Ihre besser ist als die anderen. Sie können auf die Schaltfläche "Bearbeiten" klicken, um Ihre Antwort zu ergänzen.
Brian Tompsett - 莱恩 莱恩
1

Wenn Sie eine Multiline EditTextmit verwenden möchten imeOptions, versuchen Sie:

android:inputType="textImeMultiLine"
Chris
quelle
1

Fügen Sie inputType zu edittext hinzu und bei Eingabe wird der nächste edittext angezeigt

android:inputType="text"
android:inputType="textEmailAddress"
android:inputType="textPassword" 

und viele mehr.

inputType = textMultiLine wechselt bei der Eingabe nicht zum nächsten Edittext

Sharmad Desai
quelle
1

In Kotlin habe ich Bellow wie ..

  1. xml:

    <EditText
      android:id="@+id/et_amount"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:imeOptions="actionNext"
      android:inputType="number"
      android:singleLine="true" />
  2. in Kotlin:

    et_amount.setOnEditorActionListener { v, actionId, event ->
    
        if (actionId == EditorInfo.IME_ACTION_NEXT) {
            // do some code
            true
        } else {
            false
        }
    }
Enamul Haque
quelle
0
Inside Edittext just arrange like this


<EditText
    android:id="@+id/editStWt1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:imeOptions="actionNext" //now its going to rightside/next field automatically
    ..........
    .......

</EditText>
Kishore Reddy
quelle
0

Wenn Sie das Element in der Bildlaufansicht haben, können Sie dieses Problem auch wie folgt lösen:

<com.google.android.material.textfield.TextInputEditText
                android:id="@+id/ed_password"
                android:inputType="textPassword"
                android:focusable="true"
                android:imeOptions="actionNext"
                android:nextFocusDown="@id/ed_confirmPassword" />

und in Ihrer Tätigkeit:

edPassword.setOnEditorActionListener(new EditText.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            if (actionId == EditorInfo.IME_ACTION_NEXT) {
                focusOnView(scroll,edConfirmPassword);
                return true;
            }
            return false;
        }
    });

public void focusOnView(ScrollView scrollView, EditText viewToScrollTo){
    scrollView.post(new Runnable() {
        @Override
        public void run() {
            scrollView.smoothScrollTo(0, viewToScrollTo.getBottom());
            viewToScrollTo.requestFocus();
        }
    });
}
Abdullah Hashmi
quelle
0

Einfacher Weg :

  • Bewegen Sie den Cursor automatisch zum nächsten Edittext
  • Wenn edittext die letzte Eingabe ist -> versteckte Tastatur

Fügen Sie dies dem Feld edittext in der XML-Datei hinzu

android:inputType="textCapWords"
vuhoanghiep1993
quelle