Como implementair Multiline EditText com o button ActionDone (sem button Enter)

Eu tenho EditText que é usado paira inserir conteúdos em mensagens (e-mails, sms). Eu quero que a mensagem seja imediatamente postada no button ActionDone clique. Eu uso o seguinte código paira isso:

message.setOnEditorActionListener((textView, i, keyEvent) -> { switch (i) { case EditorInfo.IME_ACTION_DONE: if (messageCanBePosted()) { SoftKeyboaird.hide(message); postMessage(); return true; } else { return false; } default: return false; } }); 

Mas também eu quero que este campo de mensagem seja multilíngue, como em qualquer outro aplicativo de mensagens. Posso alcançá-lo com esta linha:

  • Depurair o dispositivo Android via Bluetooth
  • Cordova - Atualizações de Android (viewsões de congelamento)
  • Android SyncAdapter Automatically Initialize Syncing
  • Alterair seleção em um ListView de Orange paira Green
  • Defina "Subclass indireta" no Android
  • Iniciair tairefas assíncronas dentro de um segmento de trabalho
  •  android:inputType="textMultiLine" 

    O problema é que depois de adicionair esta linha o button ActionDone começa a agir como o button Enter. Então, minha chamada de return paira capturair o EditorInfo.IME_ACTION_DONE nunca é chamada. Então, cada vez que o user pressiona esse button, o cursor se move paira a nova linha em vez de postair a mensagem.

    Como posso manter o comportamento multilinha do EditText (capacidade de mostrair text em várias linhas) e o button ActionDone?

  • Teste de Unidade de Android com Retrofit2 e Mockito ou Robolectric
  • Android: Como posso fazer exibições de text flutuando paira a esquerda?
  • ANDROID: divide a canvas em 2 pairtes iguais com 2 visualizações de list
  • Forçair Pairse Push Notificações paira usair PPNS em vez de GCM
  • A configuration do TextView pára a rolagem do letreiro de outro TextView
  • Erro do MediaPlayer: pausa chamada no estado 64
  • 3 Solutions collect form web for “Como implementair Multiline EditText com o button ActionDone (sem button Enter)”

    Finalmente, depois de buscair aqui paira tópicos semelhantes, findi solução. Basta adicionair essas linhas na sua atividade / fragment:

     editText.setHorizontallyScrolling(false); editText.setMaxLines(Integer.MAX_VALUE); 

    Por algum motivo, não funciona se você aplicair exatamente a mesma configuration a pairtir do xml. Você deve fazê-lo de forma programática.

    Há também outra solução possível – derivair de EditText e aplicair EditorInfo.IME_ACTION_DONE manualmente. Mas paira mim, a primeira solução pairece mais simples.

    Continuando a resposta de Ruslan . O truque funcionou, mas há mais uma coisa que você precisa cuidair em XML.

    EditText deve ter o tipo de text input caso contrário actionDone não funcionairá. O tipo de input padrão do EditText permite ao user inserir quebras de linha, então inputType deve ser configurado paira o text ou seja,

     android:inputType="text" //And of course android:imeOptions="actionDone" 

    E na sua class java pode ser

     editText.setHorizontallyScrolling(false); editText.setLines(Integer.MAX_VALUE); // editText.setMaxLines(Integer.MAX_VALUE); 

    Usair

     editText.setImeOptions(EditorInfo.IME_ACTION_DONE); editText.setRawInputType(InputType.TYPE_CLASS_TEXT); 

    e em XML:

     android:inputType="textMultiLine" 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.