2010-10-22 9 views
10

Ho un'attività in cui desidero visualizzare un'intestazione che occupa il quarto superiore dell'app e visualizza un insieme dinamico di testo. In alcuni casi, tutto si adatta a una riga e mi piacerebbe che la dimensione del carattere venisse ridimensionata in modo che fosse grande e facile da leggere. In alcuni casi sarà su più righe (in genere meno di 4) e dovrà essere più piccolo.Dimensionamento di una TextView su più linee Android

La complicazione è che se ho impostato in modo esplicito le nuove righe in setText a volte sarà inserire un ritorno a capo in cui non mi aspettavo uno, vale a dire:

 
"My first line of text\nMy Second line of text" 
Might get turned into (it's right adjusted in this version): 
"My first line of 
      text 
    My second line 
      of text" 

io non sono sicuro di come fare per se mantenere il TextView dal tentativo di inserire newline o lasciarlo semplicemente occuparsi della formattazione del tutto. Se imposto del testo come una sola parola molto lunga, inserirò una nuova riga nel mezzo in un punto scelto. Altre volte ho solo casualmente ottenuto le ultime righe di testo.

Devo impostare in modo esplicito la dimensione del carattere in modo che sia veramente piccola per ottenere il layout corretto e quindi regolare manualmente le dimensioni? Esiste una "best practice" che dovrei usare per questo? Se imposto che la dimensione del font sia un carattere abbastanza grande, funziona in qualche modo, ma sarebbe bello capire quale sarebbe il modo "giusto" per farlo. E preferirei non dover aggiungere manualmente 4 TextViews a riga singola e formattarle da solo.

L'XML di layout che sto utilizzando è:

<TextView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentRight="true" 
     android:layout_marginTop="10dip" 
     android:layout_marginRight="8dip" 
     android:singleLine="false" 
     android:ellipsize="marque" 
     android:gravity="right|bottom" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:textSize="30sp" 
/> 
+0

Umm, non è abbastanza chiaro cosa vuoi fare. Vuoi ridimensionare il testo per riempire una casella di testo? Perché stai aggiungendo newline? Basta impostare la dimensione, inserire il testo e lasciarlo avvolgere. – Falmarri

+0

Che dimensioni metti per far sì che si adatti effettivamente all'intera casella di testo? Se scegli una dimensione troppo grande, TextView decide di tagliare/inserire nuove righe nel testo (e non sono sicuro di come decida). Se si sceglie una dimensione piccola e non si inseriscono nuove linee in sé stesso, è difficile ridimensionarla senza passare praticamente da una dimensione di carattere all'altro e senza doverla ritrasmettere (inserendo nuove righe) ogni volta. Sarebbe bello se impedissi a TextView di fare scherzi con le cose e di ridimensionare/inserire nuove linee tu stesso. – William

risposta

0

Si può fare. Aggiungi un nuovo carattere di linea al valore di stringa. Quindi imposta questo valore di stringa come attributo di testo di TextView.

String temp = "ASDF \n"+"EFG \n"+"HIJ"; 
TextView tv=//find it from the context 
tv.setText(temp); 
0

C'è una soluzione più che si può utilizzare WebView per fare ciò che si vuole controllare questo Android TextView Justify Text risposta per i dettagli. usando la webview non devi preoccuparti degli allineamenti di linea che puoi gestire con la proprietà hssml css

-1

Lasciatemi ricapitolare la tua domanda per assicurarmi di aver capito bene.

  1. l'input è sempre da 1 a 4 righe di testo
  2. voi sempre e solo voglia di rompere alla fine di una linea, se si dispone di più di una linea
  3. si vuole essere ogni riga come di grandi dimensioni possibile in modo che si adatti al textview che è 1/4 dello schermo di altezza?

propongo si effettua una custom view:

  • uso Paint.getTextBounds per determinare la migliore dimensione del testo in modo dinamico nel codice
  • per disegnare il testo è possibile utilizzare la classe helper StaticLayout per controllare l'allineamento e tale .
  • di averti visualizzazione personalizzata occupa 1/4 dello schermo o metterlo all'interno di un LinearLayout e utilizzare il layout_weight per assegnarlo sua altezza o impostarlo programmazione in View.onMeasure
1

Si potrebbe contare la lunghezza della stringa e impostare la dimensione del testo per adattare la dimensione migliore per ogni lunghezza

qualcosa in questa forma

if(myString.length()==40){ 
    myTextview.setTextSize(11); 
else if(myString.length()==25){ 
    myTextview.setTextSize(16); 
... 

Spero che questo aiuta.