Eu estou querendo saber se existe uma maneira de lidar com o usuário pressionando Enterenquanto digita EditText
, algo como o evento HTML onSubmit.
Também me pergunto se existe uma maneira de manipular o teclado virtual de forma que o botão "Concluído" seja rotulado como outra coisa (por exemplo, "Ir") e execute uma certa ação quando clicado (novamente, como no Submeter).
android
android-edittext
textview
Felix
fonte
fonte
Respostas:
Sim.
Também sim.
Você deseja examinar os atributos
android:imeActionId
eandroid:imeOptions
, além dosetOnEditorActionListener()
método, todosTextView
.Para alterar o texto do botão "Concluído" para uma sequência personalizada, use:
fonte
fonte
enter
no meu texto de edição, o texto inteiro é movido para baixo ... Como posso corrigir isso?Aqui está o que você faz. Ele também está oculto no código de exemplo do Bluetooth Developer 'Bluetooth Chat'. Substitua as partes em negrito que dizem "exemplo" por suas próprias variáveis e métodos.
Primeiro, importe o que você precisa para a Atividade principal, onde deseja que o botão de retorno faça algo especial:
Agora, faça uma variável do tipo TextView.OnEditorActionListener para sua chave de retorno (aqui eu uso exampleListener );
Então você precisa dizer ao ouvinte duas coisas sobre o que fazer quando o botão de retorno é pressionado. Ele precisa saber do que estamos falando sobre EditText (aqui eu uso o exampleView ) e, em seguida, precisa saber o que fazer quando a tecla Enter for pressionada (aqui, example_confirm () ). Se este é o último ou o único EditText da sua atividade, ele deve fazer o mesmo que o método onClick para o botão Enviar (ou OK, Confirmar, Enviar, Salvar, etc).
Por fim, defina o ouvinte (provavelmente no seu método onCreate);
fonte
KeyEvent.ACTION_UP
. Para que isso funcione, você precisa primeiro consumir oACTION_DOWN
evento:if (actionId == EditorInfo.IME_NULL && event.getAction() == KeyEvent.ACTION_DOWN) { return true; }
. Em seguida, você pode verificar oACTION_UP
evento e executar a ação (semelhante à resposta acima). Se você não consumir oACTION_DOWN
evento,onEditorAction
não será necessárioACTION_UP
.if (event.getKeyCode() == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_DOWN) {...}
- não poderia obter qualquer das outras abordagens para o trabalhoOs teclados de hardware sempre produzem eventos de digitação, mas os teclados de software retornam diferentes IDs de ação e nulos no SingleLine EditTexts. Esse código responde toda vez que o usuário pressiona enter em um EditText em que este ouvinte foi definido, independentemente do EditText ou do tipo de teclado.
A aparência padrão da tecla enter em singleLine = false fornece uma seta dobrada para inserir o teclado. Quando singleLine = true no último EditText, a chave diz DONE e, no EditTexts, antes que diz NEXT. Por padrão, esse comportamento é consistente em todos os emuladores de baunilha, android e google. O atributo scrollHorizontal não faz nenhuma diferença. O teste nulo é importante porque a resposta dos telefones às entradas flexíveis é deixada para o fabricante e, mesmo nos emuladores, os emuladores de baunilha Nível 16 respondem a entradas flexíveis longas em várias linhas e rolagemHorizontal EditTexts with a actionId de NEXT e null a o evento.
fonte
Esta página descreve exatamente como fazer isso.
https://developer.android.com/training/keyboard-input/style.html
Defina o android: imeOptions , basta verificar o actionId no onEditorAction. Portanto, se você definir imeOptions como 'actionDone', verificará 'actionId == EditorInfo.IME_ACTION_DONE' em onEditorAction. Além disso, certifique-se de definir o android: inputType.
Aqui está o EditText do exemplo vinculado acima:
Você também pode definir isso programaticamente usando a função setImeOptions (int) . Aqui está o OnEditorActionListener do exemplo vinculado acima:
fonte
Eu sei que isso tem um ano, mas eu descobri que isso funciona perfeitamente para um EditText.
Impede tudo, menos texto e espaço. Não consegui tabular, "retornar" ("\ n") ou qualquer coisa.
fonte
Assim como um adendo à resposta de Chad (que funcionou quase perfeitamente para mim), descobri que precisava adicionar uma verificação no tipo de ação KeyEvent para impedir que meu código fosse executado duas vezes (uma vez na tecla e outra na tecla para baixo) evento).
Consulte http://developer.android.com/reference/android/view/KeyEvent.html para obter informações sobre eventos de ação repetidos (mantendo pressionada a tecla Enter) etc.
fonte
Eu tinha um propósito semelhante. Eu queria resolver pressionando a tecla "Enter" no teclado (que eu queria personalizar) em um AutoCompleteTextView que estende o TextView. Tentei diferentes soluções acima e elas pareciam funcionar. Mas tive alguns problemas quando mudei o tipo de entrada no meu dispositivo (Nexus 4 com AOKP ROM) do SwiftKey 3 (onde funcionou perfeitamente) para o teclado Android padrão (onde, em vez de manipular meu código do ouvinte, uma nova linha era entrou depois de pressionar a tecla "Enter". Demorei um pouco para resolver esse problema, mas não sei se ele funcionará em todas as circunstâncias, independentemente do tipo de entrada que você usar.
Então aqui está a minha solução:
Defina o atributo de tipo de entrada do TextView no xml como "text":
Personalize o rótulo da tecla "Enter" no teclado:
Defina um OnEditorActionListener para o TextView:
Espero que isso ajude outras pessoas a evitar os problemas que tive, porque quase me deixaram maluco.
fonte
No seu xml, adicione o atributo imeOptions ao editText
Em seguida, no seu código Java, adicione o OnEditorActionListener ao mesmo EditText
Aqui está a explicação: o imeOptions = actionDone atribuirá "actionDone" à EnterKey. A tecla EnterKey no teclado mudará de "Enter" para "Done". Portanto, quando a tecla Enter for pressionada, ela acionará esta ação e, portanto, você a manipulará.
fonte
Você também pode fazer isso ..
fonte
enter
no meu texto de edição, o texto inteiro é movido para baixo ... Como posso corrigir isso?Funciona muito bem para mim
Além disso, ocultar o teclado
fonte
Primeiro, você deve definir o EditText para ouvir o pressionamento de tecla
Segundo, defina o evento com a tecla pressionada, por exemplo, evento para definir o texto do TextView:
E, finalmente, não esqueça de importar EditText, TextView, OnKeyListener, KeyEvent na parte superior:
fonte
funcionando perfeitamente
}
funcionando perfeitamente
fonte
Xml
fonte
Isso deve funcionar
fonte
Digite este código no seu editor para poder importar os módulos necessários.
fonte
Isso funciona bem em telefones LG Android. Impede que
ENTER
outros caracteres especiais sejam interpretados como caracteres normais.Next
ODone
botão ou aparece automaticamente eENTER
funciona conforme o esperado.fonte
Aqui está uma função estática simples que você pode ativar na sua classe
Utils
ouKeyboards
que executará o código quando o usuário pressionar a tecla Return em um teclado de hardware ou software. É uma versão modificada da excelente resposta do Earcasperfonte
O InputType no campo de texto deve estar
text
em ordem para o que o CommonsWare disse para funcionar. Apenas tentei tudo isso, nenhum inputType antes da avaliação e nada funcionou, o Enter continuou registrando como soft enter. DepoisinputType = text
, tudo, incluindo o setImeLabel, funcionou.Exemplo:
android:inputType="text"
fonte
fonte
Uma maneira confiável de responder a um <enter> em um EditText é com um TextWatcher , um LocalBroadcastManager e um BroadcastReceiver . Você precisa adicionar a biblioteca de suporte v4 para usar o LocalBroadcastManager. Eu uso o tutorial em vogella.com : 7.3 "Eventos de transmissão local com LocalBroadcastManager" devido ao seu exemplo conciso completo de código. Em onTextChanged before é o índice do final da alteração antes da alteração >; menos o início. Quando no TextWatcher o thread da interface do usuário está ocupado atualizando o editText editável, enviamos uma Intenção para ativar o BroadcastReceiver quando o thread da interface do usuário terminar de atualizar o editText.
fonte
android:inputType="textCapSentences"
), os retornos de carro serão filtrados para fora da entrada, para que onTextChanged () não seja chamado quando o usuário pressionar a tecla Enter.Esta pergunta ainda não foi respondida com Butterknife
LAYOUT XML
JAVA APP
fonte
Usando o Kotlin, criei uma função que lida com todos os tipos de ações "feitas" para o EditText, incluindo o teclado, e é possível modificá-lo e também manipular outras teclas como desejar:
Então, use amostra:
Quanto à alteração do rótulo, acho que depende do aplicativo do teclado e que geralmente muda apenas na paisagem, conforme escrito aqui . De qualquer forma, exemplo de uso para isso:
Ou, se você quiser em XML:
E o resultado (mostrado na paisagem):
fonte
Adicione estas opções, e deve funcionar:
fonte
Isso fornecerá uma função que pode ser chamada quando o usuário pressionar a tecla Enter.
Uso
fonte