2011-12-11 21 views
25

Tengo un problema con TextView. No quiero tener ningún margen/relleno por encima.Cómo quitar el margen superior de 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"/> 

Mi TextView se parece a esto ya pesar de la textSize y height están situados en el mismo valor, hay un espacio por encima de la fuente. Me molesta porque quiero poner otra vista con respecto a la parte superior de la fuente. ¿Este espaciado está incluido en la fuente misma?

TextView in RelativeLayout

Y otra pregunta: Si descubrí que 20dp margen de arriba y de abajo 7DP funciona perfectamente en mi dispositivo, que puede depender de que se comportará de una manera similar en otras pantallas? (estos márgenes son para los botones)

+0

Se puede publicar una imagen de lo que eres ¿viendo? –

+0

sí, por favor publique una imagen –

+0

Parece posible que la fuente tenga espaciado superior. Intente mantener la altura como 100dp pero aumentando el tamaño del texto (102dp o 105dp, etc.). – Squonk

Respuesta

43

usando android:includeFontPadding="false" me ayudó mucho en una situación similar.

+0

Gracias! Esto solucionó que mi fuente no se alineara correctamente con la parte superior de mi TextView. – TSL

+1

Gracias, justo lo que estaba buscando. Esto, dicho sea de paso, debe ser el predeterminado. – HGPB

+10

funciona un poco, pero no puede resolver mi problema a la perfección. –

2

Lo que hay que hacer es poner el otro punto de vista con respecto a la parte superior de la fuente, y darle una negativa android:layout_marginBottom de inmersión, de tal manera que coincida con la parte superior de la pila. Si la fuente tiene un margen, no creo que haya una mejor manera de hacerlo.

1

Sí, este espacio está incluido por defecto. No puede eliminar ese espacio según mi área de búsqueda. Por lo tanto, debe tener que implementar alguna lógica para tener dicha vista.

Vea la imagen abajo:

enter image description here

No es una buena idea pero se puede hacer, como a continuación código:

<?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> 

Aquí, en primer lugar "10" es una de sus propiedades y segundo es como lo he establecido para ti.

disfrutar. :))

+0

ver respuesta actualizada. –

+0

Puede lograr lo mismo con tener android: lineSpacingExtra establecido en un valor negativo. Pero ambos tienen el problema de que TextView clip los caracteres fuera de los límites como g, q, p. –

+0

Divertido truco, creo. Pero no es útil si también quiero eliminar el espacio extra del fondo. – user3390963

9

Tuve el mismo problema cuando la configuración android:includeFontPadding=false no ayudó. La mejor solución que podría encontrar en un tiempo razonable era reemplazar el método de la TextView onDraw y para ajustar la lona por la diferencia entre la parte superior y de ascenso valores de las medidas de fuente:

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

Esto casi funciona, en un TextView con una letra pequeña se alinea perfectamente. En una fuente de 74sp, no tanto. Pero +1 para esta fina solución. –

Cuestiones relacionadas