2012-07-20 9 views
11

Ho un TextView dove voglio che l'interlinea sia inferiore a 1.0, cioè ci sarà meno della quantità di spazio predefinita tra le righe. Ho fatto questo:TextView lineSpacingMultiplier meno di zero interrompe l'ultima riga

<TextView 
    android:id="@+id/text_header" 
    android:layout_width="@dimen/text_header_width" 
    android:layout_height="wrap_content" 
    android:text="@string/header_text" 
    android:textSize="@dimen/text_header_text_size" 
    android:typeface="helvetica" 
    android:lineSpacingMultiplier="0.95" /> 

Ma nel testo sulla linea di fondo, i discendenti (ad esempio Y, G, e P) vengono leggermente tagliate. In altre parole, mancano circa 2 o 3 pixel del valore inferiore di quelle lettere.

Ho provato a giocare con margini e padding senza successo. Mi sembra di essere in grado di risolvere il problema utilizzando un'altezza specificata (con una piccola stanza in più) invece di wrap_content, ma vorrei evitarlo se possibile.

risposta

-2

Prova questo

dall'uso codice textView.setLineSpacing()

o

dal XML utilizzano android:lineSpacingExtra="xxdp"

+0

Questo potrebbe funzionare. Non esattamente quello che voglio, però: voglio che la spaziatura si riduca come percentuale della dimensione del carattere, non come valore di dp. Lo proverò. – parkerfath

+0

Questo NON funziona come previsto, poiché aggiunge una spaziatura aggiuntiva sopra lo spazio di linea esistente e, se si utilizza un moltiplicatore di 1 e un valore extra negativo, il testo viene troncato come prima ... –

0

Dal mio test sembra un problema con le versioni di Android sotto api 21. I risolto in questo modo:

Nel mio caso io uso un TextView che ha un massimo di 2 linee con ellissi alla fine.

di stile per il mio TextView prima di api 21 (values/style.xml)

<style name="MyTextViewStyle" parent="Base.TextAppearance.AppCompat"> 
    <item name="android:layout_width">match_parent</item> 
    <item name="android:layout_height">wrap_content</item> 
    <item name="android:gravity">left</item> 
    <item name="android:textColor">@color/blue_dark</item> 
    <item name="android:textSize">16sp</item> 
    <item name="android:maxLines">2</item> 
    <item name="android:ellipsize">end</item> 
    <item name="android:lineSpacingExtra">-4dp</item> 
    <item name="android:paddingTop">0dp</item> 
    <item name="android:paddingBottom">4dp</item> 
    <item name="android:includeFontPadding">false</item> 
</style> 

di stile per la mia TextView per api 21 e dopo (values-v21/style.xml)

<style name="MyTextViewStyle" parent="Base.TextAppearance.AppCompat"> 
    <item name="android:layout_width">match_parent</item> 
    <item name="android:layout_height">wrap_content</item> 
    <item name="android:gravity">left</item> 
    <item name="android:textColor">@color/blue_dark</item> 
    <item name="android:textSize">16sp</item> 
    <item name="android:maxLines">2</item> 
    <item name="android:ellipsize">end</item> 
    <item name="android:lineSpacingExtra">-4dp</item> 
    <item name="android:paddingTop">0dp</item> 
    <item name="android:paddingBottom">0dp</item> 
    <item name="android:includeFontPadding">true</item> 
</style> 

Il segreto qui è soprattutto android:paddingBottom che è l'opposto di android:lineSpacingExtra prima di api 21. Sui miei dispositivi corregge il bug dell'ultima linea troncata in fondo.

NOTA: <item name="android:lineSpacingExtra">-4dp</item> sembra equivalente a <item name="android:lineSpacingMultiplier">0.8</item>.

Problemi correlati