2011-12-02 1 views
21

Sto cercando di avere un EditText con le seguenti caratteristiche quando si modifica con un tasto virtuale. Preparo la documentazione, ho cercato qui, gioco con i parametri ma non ho trovato una configurazione funzionante.Modifica testo con riga di testo singola, ritorno a capo e azione completata?

  1. La vista EditView sullo schermo ha altezza per alcune righe (ad esempio 3-4).
  2. Il testo del contenuto è una singola riga (ovvero nessuna interruzione di riga).
  3. Se il testo del contenuto è più lungo della larghezza della vista, è necessario eseguire il wrapping sulla riga successiva
  4. Il tasto Invio del tasto virtuale mostra l'etichetta dell'azione eseguita.

ho potuto raggiungere {1,2,3} e {1,2,4} ma non {1,2,3,4}. Il mio razionale è che, poiché il contenuto è una singola riga (nessuna interruzione di riga), il tasto Invio non viene utilizzato e quindi dovrebbe essere possibile passare all'etichetta Fine.

Il mio codice di configurazione simile a questo

editText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_SENTENCES | InputType.TYPE_TEXT_FLAG_IME_MULTI_LINE); 
editText.setHorizontallyScrolling(false); 
editText.setSingleLine(false); 
// This does not work. Soft keyboard has Enter action. 
editText.setImeOptions(EditorInfo.IME_ACTION_DONE); 

E 'possibile? Qualche suggerimento?

+0

Qualcuno può almeno confermare che questo non può essere fatto? – user1076637

+0

Rilegatura riga delineata nella risposta a [questa domanda] [1]. [1]: http://stackoverflow.com/questions/3276380/android-word-wrap-edittext-text –

+0

Grazie A T. Sì, questo avvolgendo ma come ho capito di lavorare con richiesto # 4 sopra? – user1076637

risposta

32

Questa combinazione (e l'ordine specifico delle chiamate di metodo EditText) dovrebbe produrre la configurazione che si desidera:

editText.setInputType(
    InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_SENTENCES); 
    editText.setSingleLine(true); 
    editText.setLines(4); // desired number of lines 
    editText.setHorizontallyScrolling(false); 
    editText.setImeOptions(EditorInfo.IME_ACTION_DONE); 
+0

FANTASTICO! Abbraccio virtuale per te :) –

+1

per modificare l'altezza in modo dinamico usa setMaxLines invece – user2798694

+0

Thx per la risposta corretta, come altri hanno detto EditText hanno contratti impliciti nascosti quando si impostano le sue proprietà così l'ordine di funzionamento è importante. Per ottenere l'avvio con la riga singola EditText e poi lo spostamento automatico alla riga successiva fino a raggiungere il limite massimo, basta sostituire: editText.setLines (4); con: editText.setMaxLines (maxLines = 5); – xyman

6

Basta aggiungere

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

con l'istanza EditText nella vostra attività di programmazione.

Configura l'istanza EditText in modo che l'utente modifichi una stringa su una riga che viene visualizzata con il soft-wrapping su più righe con le opzioni IME.

+1

Giusto per essere chiari, non è possibile impostare questi valori nel proprio XML di layout: saranno ignorati. Impostali a livello di codice proprio come dice l'OP. – Evan