Imposta la larghezza di TextView in termini di caratteri


88

Davvero alla ricerca di una risposta a questo .

Vuoi impostare la larghezza di un TextView in base a un numero o caratteri. Quindi, se voglio che sia sempre largo 3 caratteri, potrei impostarlo e si adatterà in base all'impostazione textSize. Senza questo, devo impostare una larghezza a 50dip o qualcosa del genere, che può o non può essere giusta a seconda della dimensione del carattere.


C'è forse un modo per farlo specificando la tua dimensione in sp.
CommonsWare

@CommonsWare, sì, se puoi dirmi quanti SP equivalgono a un personaggio che potrebbe funzionare (ma vedi la mia risposta sotto usando minEms perché penso che sia quello che voglio). Quindi se la dimensione del testo = 30sp e voglio 3 caratteri di larghezza, imposto la larghezza a 90sp? Credo di poterlo provare.
Fraggle

2
Sì, minEmsprobabilmente è una risposta migliore.
CommonsWare

Risposte:


178

Rispondendo alla mia domanda ...

E il vincitore è: imposta l' minEmsattributo ( android:minEms) !!!

Quindi " ems " si riferisce alla dimensione del carattere più largo, tipicamente una "M", capito? Quindi impostare minEms su un valore intero dire 3, su un EditText o TextView dovrebbe assicurarsi che sia largo almeno 3 caratteri. Puoi anche impostare maxEms.

Quindi la risposta di Kyle su questo thread, sebbene sbagliata, mi ha fatto trovare la risposta, quindi grazie Kyle.


3
ovviamente sto ancora testando per vedere se funziona davvero, ma finora sembra proprio così.
Fraggle

8
Si noti inoltre che layout_widthdeve essere wrap_contentaffinché minEms e maxEms funzionino come previsto, come sottolinea questa risposta .
Jonik

0

La maggior parte dei caratteri non imposta tutte le larghezze dei caratteri in modo che siano identiche. Courier è forse l'eccezione più utilizzata, ma generalmente guarda la differenza tra una i e una A, per esempio. Questo rende ciò che chiedi di fare un po 'un problema.


giusto, quindi speravo che questo problema fosse stato risolto. Quindi imposta la larghezza in termini di caratteri e poi al momento della visualizzazione scopri le caratteristiche del carattere per quel campo e determina quanto dovrebbe essere grande in base a quello. Quindi chiedendo davvero se questo problema fosse stato risolto, in un modo semplice e carino. Sembra di no.
Fraggle

0

Prova a usare: android:maxLength="3"

Questo limiterà il tuo testo a un numero specifico di caratteri.


0

ems, contrariamente alle credenze popolari (o almeno dalla maggior parte dei thread su ems qui), non si basa sulla larghezza di una singola "M".

Originariamente era così nella tipografia, ma nel supporto digitale, incluso Android, il suo significato è stato spostato alla dimensione del carattere tipografico utilizzato, o in altre parole, alla sua altezza (escludendo qualsiasi imbottitura per accenti / segni diacritici).

Quindi ciò significa che quando specifichi il emsper un TextView, lo userà textSizecome base e lo moltiplicherà per il valore emsspecificato.

Ad esempio, se si imposta un TextView 16sp emssu 4, la sua larghezza sarà 64sp. Puoi testarlo facilmente usando due TextView (con includeFontPaddingimpostato su false) affiancati all'interno di un ConstraintLayout (per sfruttarlo layout_constraintDimensionRatio).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.