Embora a maioria das pessoas tenha respondido diretamente à pergunta, eu queria elaborar mais sobre o conceito por trás dela. Primeiro, fui atraído pela atenção do IME quando criei uma atividade de logon padrão. Ele gerou um código para mim, que incluía o seguinte:
<EditText
android:id="@+id/password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/prompt_password"
android:imeActionId="@+id/login"
android:imeActionLabel="@string/action_sign_in_short"
android:imeOptions="actionUnspecified"
android:inputType="textPassword"
android:maxLines="1"
android:singleLine="true"/>
Você já deve estar familiarizado com o atributo inputType. Isso apenas informa ao Android o tipo de texto esperado, como endereço de e-mail, senha ou número de telefone. A lista completa de valores possíveis pode ser encontrada aqui .
Foi, no entanto, o atributo imeOptions="actionUnspecified"
que eu não entendi seu propósito. O Android permite que você interaja com o teclado que aparece na parte inferior da tela quando o texto é selecionado usando o InputMethodManager
. No canto inferior do teclado, há um botão, normalmente diz "Próximo" ou "Concluído", dependendo do campo de texto atual. O Android permite que você personalize isso usando android:imeOptions
. Você pode especificar um botão "Enviar" ou um botão "Avançar". A lista completa pode ser encontrada aqui .
Com isso, você pode ouvir pressionamentos no botão de ação, definindo a TextView.OnEditorActionListener
para o EditText
elemento. Como no seu exemplo:
editText.setOnEditorActionListener(new EditText.OnEditorActionListener() {
@Override
public boolean onEditorAction(EditText v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_DONE) {
//do here your stuff f
return true;
}
return false;
}
});
Agora, no meu exemplo, eu tinha android:imeOptions="actionUnspecified"
atributo. Isso é útil quando você deseja tentar acessar um usuário quando ele pressiona a tecla Enter. Na sua atividade, você pode detectar essa tag e tentar o login:
mPasswordView = (EditText) findViewById(R.id.password);
mPasswordView.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView textView, int id, KeyEvent keyEvent) {
if (id == R.id.login || id == EditorInfo.IME_NULL) {
attemptLogin();
return true;
}
return false;
}
});