Ho utilizzato alcune app in cui quando inserisco il mio nome utente, quindi vado alla mia password, se premo "Fine" sulla tastiera, il modulo di accesso viene inviato automaticamente, senza che io debba fare clic sul pulsante di invio. Come si fa?
Ho utilizzato alcune app in cui quando inserisco il mio nome utente, quindi vado alla mia password, se premo "Fine" sulla tastiera, il modulo di accesso viene inviato automaticamente, senza che io debba fare clic sul pulsante di invio. Come si fa?
Risposte:
Prova questo:
Nel tuo layout inserisci / modifica questo:
<EditText
android:id="@+id/search_edit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text"
android:singleLine="true"
android:imeOptions="actionDone" />
Nella tua attività inserisci questo (ad esempio in onCreate):
// your text box
EditText edit_txt = (EditText) findViewById(R.id.search_edit);
edit_txt.setOnEditorActionListener(new EditText.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_DONE) {
submit_btn.performClick();
return true;
}
return false;
}
});
Dov'è il submit_btntuo pulsante di invio con il tuo gestore onclick allegato.
submit_btn.performClick();mi sta bruciando gli occhi. Srsly? Perché non chiamare il metodo di invio?
imeActionLabelnel mio EditText, disabilitava tutto questo comportamento. Attenzione
Devi impostare le Opzioni IME sul tuo EditText.
<EditText
android:id="@+id/some_view"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="Whatever"
android:inputType="text"
android:imeOptions="actionDone" />
Quindi aggiungi un OnEditorActionListeneralla visualizzazione per ascoltare l'azione "completata".
EditText editText = (EditText) findViewById(R.id.some_view);
editText.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
boolean handled = false;
if (actionId == EditorInfo.IME_ACTION_DONE) {
// TODO do something
handled = true;
}
return handled;
}
});
Documento API ufficiale: https://developer.android.com/guide/topics/ui/controls/text.html#ActionEvent
Estendi EditText:
fun EditText.onSubmit(func: () -> Unit) {
setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_DONE) {
func()
}
true
}
}
Quindi usa il nuovo metodo in questo modo:
editText.onSubmit { submit() }
Dov'è submit()qualcosa del genere:
fun submit() {
// call to api
}
fun EditText.on(actionId: Int, func: () -> Unit) {
setOnEditorActionListener { _, receivedActionId, _ ->
if (actionId == receivedActionId) {
func()
}
true
}
}
E poi puoi usarlo per ascoltare il tuo evento:
email.on(EditorInfo.IME_ACTION_NEXT, { confirm() })
Ecco come si fa
editText.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if(actionId==EditorInfo.IME_ACTION_DONE){
//do something
}
return false;
}
});
Non dimenticare di aggiungere
<EditText android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:imeOptions="actionDone"/>
actionDone nel tuo EditText.
Nel tuo file XML all'interno del tag edittext aggiungi lo snippet di seguito
android:imeOptions="actionDone"
Quindi all'interno della tua classe Java, scrivi il codice seguente
editText.setOnEditorActionListener(new EditText.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int id, KeyEvent event) {
if (id == EditorInfo.IME_ACTION_DONE) {
//do your work here
return true;
}
return false;
}
});
aggiungi la seguente riga in edittext
android:imeOptions="actionDone"
Buona codifica
etParola = (EditText) findViewById(R.id.etParola);
btnGiris = (Button) findViewById(R.id.btnGiris);
etParola.setOnEditorActionListener(new EditText.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_DONE) {
btnGiris.performClick();
return true;
}
return false;
}
});
and;
layout xml etParola
android:imeOptions="actionDone" add
Estendi questa risposta
fun EditText.onSubmit(func: () -> Unit) {
setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_DONE) {
clearFocus() // if needed
hideKeyboard()
func()
}
true
}
}
fun EditText.hideKeyboard() {
val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(this.windowToken, 0)
}
<EditText
android:id="@+id/signinscr_userName"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="@string/userName"
android:imeOptions="actionNext" />
<EditText
android:id="@+id/signinscr_password"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="@string/password"
android:imeOptions="actionDone"
android:inputType="textPassword" />
nel file .java
EditText userNameField = (EditText) findViewById(R.id.signinscr_userName);
EditText passwordField = (EditText) findViewById(R.id.signinscr_password);
passwordField.setOnEditorActionListener(new OnEditorActionListener() {
public boolean onEditorAction(TextView arg0, int arg1, KeyEvent arg2) {
//Do your operation here.
return false;
}
});
EditText edit_txt = (EditText) findViewById(R.id.search_edit);
edit_txt.setOnEditorActionListener(new EditText.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
// which is u had set a imeoption
if (actionId == EditorInfo.IME_ACTION_DONE) {
submit_btn.performClick();
return true;
}
return false;
}
});