É possível ter um EditText
widget com android:inputType="textMultiLine"
set, e android:imeOptions="actionDone"
ao mesmo tempo?
Eu gostaria de uma caixa de edição de várias linhas, com o botão de ação no teclado concluído, não Enter (Retorno de carro), mas não parece estar funcionando.
desde já, obrigado
Respostas:
Usar
e em XML:
fonte
textField.setCursorVisible(false);
dentro de umonEditorActionListener
Da documentação do Android: ' "textMultiLine" Teclado de texto normal que permite aos usuários inserir longas cadeias de texto que incluem quebras de linha (retornos de carro) . 'Portanto, o atributo textMultiLine não é apropriado se você deseja ter o botão' Concluído 'no teclado.
Uma maneira simples de obter um campo de entrada de várias linhas (neste caso 3 linhas) com o botão concluído é usar EditText com
No entanto, por algum motivo, isso só funciona para mim se eu fizer essas configurações no código em vez do arquivo de layout (em onCreate) por
Espero que isso ajude alguém, pois demorou um pouco para descobrir. Se você encontrar uma maneira de fazê-lo funcionar a partir do manifesto, informe-nos.
fonte
maxLines()
vez de,setLines()
se quiser evitar alterar a altura doEditText
setMaxLines(3)
) Muito obrigado!Exemplo de trabalho! Crie a classe EditText personalizada abaixo que ofereça suporte a esse recurso e use a classe no arquivo xml. Código de trabalho:
fonte
Para fazer isso no Kotlin (e também, opcionalmente, aplicar outras configurações, como
textCapSentences
você pode usar esta função de extensão:Uso:
fonte
setRawInputType
vez desetInputType
Acho que é assim que você faz as coisas. Ter
android:inputType="textMultiLine"
,android:imeOptions="actionDone"
torna a funcionalidade da chave de entrada ambígua. Apenas tenha em mente que você pode usarandroid:lines="10"
e talvez removerandroid:inputType="textMultiLine"
, mas depende do que você deseja alcançar, às vezes você só precisa doandroid:inputType="textMultiLine"
e não há substituto para ele.fonte
Isso parece funcionar perfeitamente para mim
fonte
Solução Kotlin Reutilizável
Definir esses valores no código foi a única coisa que funcionou para mim
Eu exijo isso com frequência, então fiz isso para manter o código limpo:
Se você deseja adicionar uma ação personalizada opcional em 'Concluído', tente o seguinte:
Em seguida, adicione a
hideKeyboard()
chamadaEditText.multilineDone
fonte
Resposta curta: Não, acredito que não seja possível antes da API de nível 11 (3.0).
O mesmo problema surgiu aqui (discutido nos comentários à resposta aceita):
Botão de ação do teclado Android Soft
Do comentário final:
fonte
Uma maneira simples de contornar essa situação:
mantenha estes atributos no EditText:
em seguida, adicione este código para ocultar o teclado apenas quando ENTER for pressionado:
fonte
Se não for sobre a aparência do teclado na tela, você poderia simplesmente colocar um ouvinte de entrada no teclado e disparar o status "concluído" se o usuário inserir uma nova linha.
fonte
se você usar a opção de entrada textImeMultiline com imeoptions flagnext e actionnext você terá um próximo botão em vez do cariage return
fonte
Embora nenhuma das outras soluções tenha funcionado para mim, as seguintes funcionaram lindamente e me pouparam dias e dias de mais pesquisas no Google, com algumas reviravoltas, é claro. Infelizmente não me lembro de onde obtive o código exatamente e, portanto, não posso dar ao autor o crédito que ele merece.
Em seu código Java:
fonte
Estou no 4.xe tentei chamar setHorizontallyScrolling () (com ou sem setLine () ou setMaxLines ()), bem como muitas configurações XML diferentes para exibir o botão Concluído. Nenhum deles funcionou. O resultado final é que se o seu EditText for multilinha, o Android sempre desejará mostrar o retorno do carro em vez do botão "Concluído", a menos que você faça algum truque em torno disso.
A solução de menor complicação que encontrei que não envolve o remapeamento do comportamento do retorno de carro está aqui: https://stackoverflow.com/a/12570003/3268329 . Esta solução anulará o desejo implacável do Android de forçar a configuração do sinalizador IME_FLAG_NO_ENTER_ACTION para visualizações multilinhas, o que faz com que o botão Concluído desapareça.
fonte
Eu também lutei por um bom tempo, mas finalmente encontrei uma solução!
Basta criar uma classe EditText personalizada como:
Esta classe remove lineBreaks (\ n), quebra o texto como textMultiline faria, E permite que você substitua o botão Enter por um ImeAction;).
Você só precisa chamá-lo em seu XML em vez da classe EditText clássica.
Para explicar a lógica aqui:
fonte
A solução de trabalho está aqui, crie seu EditTextView personalizado (apenas estenda um textview) e substitua onInputConnection com um pedaço de código que você encontrará na resposta aceita aqui: Multiline EditText com Done SoftInput Action Label em 2.3
fonte