Wenn ich auf 'Weiter' klicke, muss der Fokus auf dem User EditText auf das Passwort verschoben werden. Dann muss es sich von Password aus nach rechts bewegen und so weiter. Kannst du mir helfen, wie ich das programmiere?
<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>
Die Fokusbewegung basiert auf einem Algorithmus, der den nächstgelegenen Nachbarn in einer bestimmten Richtung findet. In seltenen Fällen stimmt der Standardalgorithmus möglicherweise nicht mit dem beabsichtigten Verhalten des Entwicklers überein.
Ä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 Tabulatornavigation verwenden. Dafür müssen Sie verwenden
Android:nextFocusForward="@+id/.."
Um eine bestimmte Ansicht zu erhalten, rufen Sie auf
view.requestFocus()
Zum Abhören bestimmter wechselnder Fokusereignisse verwenden Sie einen View.OnFocusChangeListener
Sie können Android:imeOptions
verwenden, um diese zusätzliche Taste auf Ihrer Tastatur zu bedienen.
Zusätzliche Funktionen, die Sie in einem mit einem Editor verknüpften IME aktivieren können um die Integration in Ihre Anwendung zu verbessern. Die Konstanten hier entsprechen den durch imeOptions definierten.
Die Konstanten von imeOptions enthalten eine Vielzahl von Aktionen und Flags. Die obigen Werte finden Sie unter dem Link oben.
Wertbeispiel
die Aktionstaste führt eine "nächste" Operation aus, die den Benutzer zur .__ führt. nächstes Feld, das Text akzeptiert.
die Aktionstaste führt eine "Fertig" -Operation aus, was bedeutet, 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 sich an Ereignissen von Ereignissen anhören möchten, verwenden Sie einen 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;
}
});
Android:inputType="text"
sollte den gleichen Effekt bringen. Nach dem nächsten Hiting wird der Fokus auf das nächste Element gesetzt.
Android:nextFocusDown="@+id/.."
verwenden Sie diese Option in Zusatz wenn Sie nicht möchten, dass die nächste Ansicht den Fokus erhält
füge deinen editText hinzu
Android:imeOptions="actionNext"
Android:singleLine="true"
Eigenschaft zur Aktivität im Manifest hinzufügen
Android:windowSoftInputMode="adjustResize|stateHidden"
in der Layout-Datei ScrollView als Root- oder Parent-Layout gesetzt alle ui
<?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 etwas hinzufügen möchten, erstellen Sie den Stil: Fügen Sie den 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>
Verwenden Sie die folgende Zeile
Android:nextFocusDown="@+id/parentedit"
parentedit
ist die ID der nächsten fokussierten EditText
.
Die obige Zeile benötigt auch die folgende Zeile.
Android:inputType="text"
oder
Android:inputType="number"
Danke für den Vorschlag an @Alexei Khlebnikov.
Android:inputType="textNoSuggestions"
Android:imeOptions="actionNext"
Android:singleLine="true"
Android:nextFocusForward="@+id/.."
Zusätzliches Feld hinzufügen
Android: inputType = "textNoSuggestions"
in meinem Fall gearbeitet
<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 wirken magisch
Android:maxLines="1"
Android:imeOptions="actionNext"
Android:singleLine="true"
Beachten Sie in Ihrem onEditorAction-Handler, dass Sie einen Boolean-Wert zurückgeben müssen, der angibt, ob Sie die Aktion behandeln (true) oder ob Sie eine bestimmte Logik angewendet haben und das normale Verhalten (false) verwenden möchten, wie im folgenden Beispiel gezeigt:
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 das, als ich nach der Ausführung meiner Logik wahr zurückkehrte, da sich der Fokus nicht bewegte.
verwenden Sie einfach den folgenden Code, der gut funktioniert, und verwenden Sie inputType für jeden Text und die nächste Schaltfläche wird auf der Tastatur angezeigt.
Android:inputType="text" or Android:inputType="number" etc
Wenn Sie eine mehrzeilige EditText
mit imeOptions
verwenden möchten, versuchen Sie Folgendes:
Android:inputType="textImeMultiLine"
In einigen Fällen müssen Sie den Fokus manuell zum nächsten Feld verschieben:
focusSearch(FOCUS_DOWN).requestFocus();
Dies kann beispielsweise erforderlich sein, wenn Sie über ein Textfeld verfügen, das beim Klicken eine Datumsauswahl öffnet, und Sie möchten, dass der Fokus automatisch zum nächsten Eingabefeld wechselt, sobald der Benutzer ein Datum ausgewählt hat und die Auswahl schließt. Es gibt keine Möglichkeit, dies in XML zu behandeln, es muss programmgesteuert erfolgen.
<?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>
Fügen Sie inputType zu edittext hinzu und bei Eingabe geht es zum nächsten edittext
Android:inputType="text"
Android:inputType="textEmailAddress"
Android:inputType="textPassword"
und viele mehr.
inputType = textMultiLine wechselt bei der Eingabe nicht zum nächsten Edittext
Einfacher Weg, wenn Sie nur wenige Felder nacheinander haben:
Müssen einstellen
Android:maxLines="1"
Android:imeOptions="actionNext"
Android:inputType=""
<- Legen Sie die Art des Texts fest. Andernfalls wird er mehrzeilig und verhindert, dass der nächste Text angezeigt wird
Beispiel:
<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"/>
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>