Estou tendo um EditText
onde estou definindo a propriedade a seguir para que eu possa exibir o botão concluído no teclado quando o usuário clicar no EditText.
editText.setImeOptions(EditorInfo.IME_ACTION_DONE);
Quando o usuário clica no botão Concluído no teclado da tela (digitação concluída), desejo alterar um RadioButton
estado.
Como posso rastrear o botão Concluído quando ele é pressionado no teclado da tela?
android
android-edittext
ime
d-man
fonte
fonte
Respostas:
Acabei com uma combinação de Roberts e chirags respostas:
Atualização: o código acima algumas vezes ativaria o retorno de chamada duas vezes. Em vez disso, optei pelo código a seguir, obtido dos clientes de bate-papo do Google:
fonte
isPreparedForSending()
e por que o segundo método retornatrue
?Tente isso, ele deve funcionar para o que você precisa:
fonte
<EditText android:imeOptions="actionDone" android:inputType="text"/>
O código Java é:
fonte
Sei que essa pergunta é antiga, mas quero destacar o que funcionou para mim.
Tentei usar o código de exemplo no site Android Developers (mostrado abaixo), mas não funcionou. Portanto, verifiquei a classe EditorInfo e percebi que o valor inteiro IME_ACTION_SEND foi especificado como
0x00000004
.Código de exemplo de desenvolvedores do Android:
Então, adicionei o valor inteiro ao meu
res/values/integers.xml
arquivo.Em seguida, editei meu arquivo de layout da
res/layouts/activity_home.xml
seguinte maneiraE então, o código de exemplo funcionou.
fonte
Mais detalhes sobre como definir o OnKeyListener e solicitá-lo ao botão Concluído.
Primeiro adicione OnKeyListener à seção de implementos da sua classe. Em seguida, adicione a função definida na interface OnKeyListener:
Dado um objeto EditText:
fonte
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:
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 oInputMethodManager
. 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 usandoandroid: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 oEditText
elemento. Como no seu exemplo: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:fonte
Graças a chikka.anddev e Alex Cohn em Kotlin, é:
Aqui, verifico a
Enter
chave, pois ela retorna emEditorInfo.IME_NULL
vez deIME_ACTION_DONE
.Consulte também Android imeOptions = "actionDone" não está funcionando . Adicione
android:singleLine="true"
noEditText
.fonte
Solução Kotlin
A maneira básica de lidar com isso no Kotlin é:
Extensão Kotlin
Use isso apenas para chamar
edittext.onDone{/*action*/}
seu código principal. Torna seu código muito mais legível e sustentávelNão se esqueça de adicionar essas opções ao seu edittext
fonte
setOnEditorActionListener
. Talvez seja apenas uma questão de definições de configuração locais, mas meu linter realmente, realmente quer me adicionar umelse
ramo muito, a fim de aceitar a "verdade" como uma instrução de retorno do ouvinte (em oposição aoif
-bloco).Se você usa as Anotações do Android https://github.com/androidannotations/androidannotations
Você pode usar a anotação @EditorAction
fonte