2012-07-20 15 views
11

Mam obiekt TextView, w którym chcę, aby odstęp między wierszami był mniejszy niż 1,0, tj. Będzie mniejszy niż domyślny odstęp między wierszami. Robiłem to:Linia TextViewMetoda liniowa mniej niż zero Ostatnia linia

<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" /> 

Ale w tekście na dolnej linii, zjazdowe (np y'S, g, a p koszulka) są nieco odcięty. Innymi słowy, brakuje dwóch lub trzech pikseli dolnej części tych liter.

Próbowałem grać z marginesami i padding bez powodzenia. Wydaje mi się, że mogę naprawić problem, używając określonej wysokości (z małym dodatkowym pokojem) zamiast wrap_content, ale chciałbym tego uniknąć, jeśli to możliwe.

Odpowiedz

-2

Spróbuj

z użycia kodu textView.setLineSpacing()

lub

z xml używać android:lineSpacingExtra="xxdp"

+0

To może działać. Nie dokładnie to, co chcę, ale chcę, aby odstępy były skalowane jako procent rozmiaru czcionki, a nie jako wartość dp. Dam temu szansę. – parkerfath

+0

To NIE działa zgodnie z oczekiwaniami, ponieważ dodaje dodatkowy odstęp na wierzchu istniejącej przestrzeni liniowej, a jeśli używa się mnożnika 1 i ujemnej wartości dodatkowej, tekst jest obcięty tak jak wcześniej ... –

0

od mojego testowania to wygląda na problem z wersjami android api poniżej 21. I rozwiązał to tak:

W moim przypadku używam TextView, który ma maksymalnie 2 linie z wielokropkiem na końcu.

Style dla mojego TextView przed 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> 

Style dla mojego TextView dla API 21 i po (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> 

Tajemnicą tego jest głównie android:paddingBottom że jest przeciwieństwem z android:lineSpacingExtra przed api 21. Na moich urządzeniach koryguje błąd ostatniej linii odciętej na dole.

UWAGA: <item name="android:lineSpacingExtra">-4dp</item> wygląda na to, że jest to odpowiednik <item name="android:lineSpacingMultiplier">0.8</item>.