2011-12-11 3 views
25

Ho un problema con TextView. Non voglio avere alcun margine/padding sopra di esso.Come rimuovere il margine superiore di TextView?

<TextView android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/ptp_hour" 
      android:textColor="@color/black" 
      android:textSize="100dp" 
      android:height="100dp" 
      android:layout_marginTop="0dp" 
      android:paddingTop="0dp" 
      android:includeFontPadding="false" 
      android:maxLines="1" 
      android:text="10"/> 

mio TextView assomiglia a questo e nonostante il textSize e height sono impostati sullo stesso valore, v'è uno spazio al di sopra di carattere. Mi dà fastidio perché voglio mettere un'altra vista relativamente alla parte superiore del carattere. Questa spaziatura è inclusa nel carattere stesso?

TextView in RelativeLayout

E un'altra domanda: se ho scoperto che 20dp margine dall'alto e dal basso 7DP funziona perfettamente sul mio dispositivo, posso contare che si comporterà in un modo simile su altri schermi? (questi margini sono per i pulsanti)

+0

potete inserire un'immagine di ciò che sei vedendo? –

+0

si prega di inviare un'immagine –

+0

Sembra possibile che il font abbia la spaziatura superiore. Prova a mantenere l'altezza di 100 dpi ma aumentando il valore textSize (102 dpi o 105 dpi ecc.). – Squonk

risposta

43

utilizzando android:includeFontPadding="false" mi ha aiutato molto in una situazione simile.

+0

Grazie! Questo ha risolto il mio carattere non allineato correttamente con la parte superiore del mio TextView. – TSL

+1

Grazie, proprio quello che stavo cercando. Questo, a proposito, dovrebbe essere il default. – HGPB

+10

funziona un po ', ma non può risolvere perfettamente il mio problema. –

2

Quello che devi fare è mettere l'altra vista relativa alla parte superiore del carattere e dargli un negativo android:layout_marginBottom in dip, in modo che corrisponda alla parte superiore del carattere. Se il carattere ha un margine, non penso che ci sia un modo migliore per farlo.

1

Sì, questo spazio è incluso per impostazione predefinita. Non sei in grado di rimuovere quello spazio come nella mia area di ricerca. Quindi è necessario implementare alcune logiche per avere tale visualizzazione.

Vedere sotto Image:

enter image description here

La sua non è una buona idea, ma si può fare come qui di seguito il codice:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_height="wrap_content" android:layout_width="wrap_content" 
    android:background="#ffffff"> 
    <TextView android:layout_width="wrap_content"   
     android:layout_height="wrap_content"   
     android:id="@+id/ptp_hour"   
     android:textColor="@android:color/black"   
     android:textSize="100sp" 
     android:lineSpacingMultiplier="0.8" 
     android:scrollY="-100dp" 
     android:scrollX="100dp" 
     android:text="10"/> 
    <TextView 
     android:text="10" 
     android:layout_height="wrap_content" 
     android:layout_width="wrap_content" 
     android:textColor="#00FFFFFF" 
     android:shadowColor="#000000" 
     android:shadowDy="-50" 
     android:shadowRadius="1" 
     android:textSize="100dp"/> 

</LinearLayout> 

Qui, prima "10" è di vostre proprietà e seconda è come ho impostato per te.

Divertiti. :))

+0

vedi risposta aggiornata. –

+0

È possibile ottenere lo stesso con Android: lineSpacingExtra impostato su un valore negativo. Ma entrambi hanno il problema che TextView ritaglierà i caratteri fuori limite come g, q, p. –

+0

Divertente mod, penso. Ma non utile se voglio rimuovere anche lo spazio extra in basso. – user3390963

9

Ho avuto lo stesso problema in cui l'impostazione android:includeFontPadding=false non ha aiutato. La soluzione migliore che ho trovato in un tempo ragionevole è stato quello di ignorare il metodo del TextView onDraw e per regolare la tela per la differenza tra superiore e risalita dei valori della metrica dei font:

FontMetricsInt fontMetricsInt; 
@Override 
protected void onDraw(Canvas canvas) { 
    if (adjustTopForAscent){ 
     if (fontMetricsInt == null){ 
      fontMetricsInt = new FontMetricsInt(); 
      getPaint().getFontMetricsInt(fontMetricsInt); 
     } 
     canvas.translate(0, fontMetricsInt.top - fontMetricsInt.ascent); 
    } 
    super.onDraw(canvas); 
} 
+0

Funziona quasi, in una TextView con un font piccolo si allinea perfettamente. Su un font 74sp, non così tanto. Ma +1 per questa soluzione eccellente. –