Cómo eliminar el espacio superior y inferior en la vista de texto de Android

Cuando incluyo el XML debajo al archivo de la disposición , puedo ver la imagen abajo. Si lo ve, puede darse cuenta de que TextView tiene espacio superior e inferior.

 <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="E1" android:background="#ff00ff00"/> 

Introduzca aquí la descripción de la imagen

Quiero eliminar el espacio. ¿Cómo eliminarlo? ¿Cómo se llama? Si alguien tiene idea .. por favor hágamelo saber. Gracias por adelantado.

Pruebe android:includeFontPadding="false" para ver si ayuda. En mi experiencia, eso ayudará un poco, pero no hay forma de reducir las dimensiones de TextView al tamaño de texto exacto perfecto para los píxeles.

La única alternativa, que puede o no dar mejores resultados, es engañar un poco y "24sp" las dimensiones para que coincidan con el tamaño del texto, por ejemplo "24sp" lugar de "wrap_content" para la altura.

Trate de establecer sus márgenes inferior y superior a un valor negativo.

algo como esto:

 android:layout_marginTop="-5dp" android:layout_marginBottom="-5dp" 

Ajuste los valores en consecuencia.

Yo tuve el mismo problema. Atributo android:includeFontPadding="false" no funciona para mí. He resuelto este problema de esta manera:

 public class TextViewWithoutPaddings extends TextView { private final Paint mPaint = new Paint(); private final Rect mBounds = new Rect(); public TextViewWithoutPaddings(Context context) { super(context); } public TextViewWithoutPaddings(Context context, AttributeSet attrs) { super(context, attrs); } public TextViewWithoutPaddings(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onDraw(@NonNull Canvas canvas) { final String text = calculateTextParams(); final int left = mBounds.left; final int bottom = mBounds.bottom; mBounds.offset(-mBounds.left, -mBounds.top); mPaint.setAntiAlias(true); mPaint.setColor(getCurrentTextColor()); canvas.drawText(text, -left, mBounds.bottom - bottom, mPaint); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); calculateTextParams(); setMeasuredDimension(mBounds.width() + 1, -mBounds.top + 1); } private String calculateTextParams() { final String text = getText().toString(); final int textLength = text.length(); mPaint.setTextSize(getTextSize()); mPaint.getTextBounds(text, 0, textLength, mBounds); if (textLength == 0) { mBounds.right = mBounds.left; } return text; } } 

Sólo quería añadir a la respuesta de DynamicMind que la razón por la que vea el espacio alrededor de sus TextViews es el relleno en fondos de 9 parches que usan de forma predeterminada.

La tecnología de 9 parches le permite especificar un área de contenido que es, efectivamente, relleno. Ese relleno se utiliza a menos que establezca el relleno de la vista explícitamente. Por ejemplo, cuando programaticamente establece un fondo de 9 parches en una vista que tenía los rellenos establecidos, se anulan. Y viceversa, si ajusta los rellenos, anulan lo establecido por el fondo de 9 parches.

Desafortunadamente, en el diseño XML no es posible determinar el orden de estas operaciones. Creo que la simple eliminación del fondo de sus TextViews ayudaría:

 android:background="@null" 

Me enfrenté al mismo problema. He aquí una buena respuesta: ¿Cómo alinear el texto a la parte superior de TextView?

Pero el código es poco inacabado y no admiten todos los tamaños de fuente. Cambiar la línea

 int additionalPadding = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 5, getContext().getResources().getDisplayMetrics()); 

a

 int additionalPadding = getTextSize() - getLineHeight(); 

El código C # completo (mono) elimina el offset superior:

 public class TextControl : TextView { public TextControl (Context context) : base (context) { SetIncludeFontPadding (false); Gravity = GravityFlags.Top; } protected override void OnDraw (Android.Graphics.Canvas canvas) { if (base.Layout == null) return; Paint.Color = new Android.Graphics.Color (CurrentTextColor); Paint.DrawableState = GetDrawableState (); canvas.Save (); var offset = TextSize - LineHeight; canvas.Translate (0, offset); base.Layout.Draw (canvas); canvas.Restore (); } } 
 public class TopAlignedTextView extends TextView { public TopAlignedTextView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public TopAlignedTextView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs); setIncludeFontPadding(false); //remove the font padding setGravity(getGravity() | Gravity.TOP); } @Override protected void onDraw(Canvas canvas) { TextPaint textPaint = getPaint(); textPaint.setColor(getCurrentTextColor()); textPaint.drawableState = getDrawableState(); canvas.save(); //remove extra font padding int yOffset = getHeight() - getBaseline(); canvas.translate(0, - yOffset / 2); if (getLayout() != null) { getLayout().draw(canvas); } canvas.restore(); } } 

Este es el código que salvó nuestro día. Fue adaptado del código mono C # de maksimko:

 public class TopAlignedTextView extends TextView { public TopAlignedTextView(Context context) { super(context); } /*This is where the magic happens*/ @Override protected void onDraw(Canvas canvas){ float offset = getTextSize() - getLineHeight(); canvas.translate(0, offset); super.onDraw(canvas); } } 

Todavía tenía que jugar alrededor de textView.setIncludeFontPadding(false) porque estamos alineando TextViews con diferentes tamaños de fuente.

¿Ha definido un margen de diseño? Por ejemplo:

 android:layout_marginTop="5dp" 

De lo contrario, si su vista de texto se envuelve dentro de un LinearLayout u otro contenedor, entonces ese frío tiene relleno o un margen también.

 android:background="@android:drawable/editbox_background" 

Úselo de acuerdo a lo que cambia que desea editbox_background. Porque el androide proporciona una cierta estructura en fondo como el código antedicho elige según su requisito. Puede ser que sea la ayuda llena a usted.

Dentro de un LinearLayout el relleno predeterminado podría ser un problema. Intente establecerlo en 0dp. Funcionó para mí.

La respuesta de TopAlignedTextView código: TopAlignedTextView @ GitHub

Utilizarlo por diseño:

 <com.github.captain_miao.view.TopAlignedTextView android:id="@+id/text_a" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingLeft="@dimen/activity_horizontal_margin" android:text="@string/text_demo_a" /> 

Introduzca aquí la descripción de la imagen

Mi manera de arreglar esto es bastante hacky, pero me las arreglé para obtener el texto para sentarse donde yo quería por la configuración de la altura de la vista de texto como estática y juguetear con ella hasta que apenas encajar el texto. En mi caso, el estilo de fuente que estaba usando tenía una altura de 64sp así que fijé la altura de mi textview a 50sp y trabajó bien. También tuve que poner foreground_gravity a fondo.

Tal vez es demasiado tarde respuesta, pero puede probar en función para eliminar el espacio de arriba a abajo. Esto también funciona para EditText para eliminar el espacio predeterminado de arriba y abajo del texto dentro de EditText.

 android:paddingTop="0dp" android:paddingBottom="0dp" 
  • Ocultar TextView después de algún tiempo en Android
  • Cómo cambiar el color de fondo de TextView a valor inicial
  • Android sdk 18 La gravedad de TextView no funciona verticalmente
  • Cómo aumentar el espacio entre párrafos en una vista de texto
  • ¿Cómo establecer el texto dentro de TextView para que esté en dos líneas?
  • TextView con color de fondo sólo en el propio texto
  • Excepción de Android TextView y puntero nulo
  • Necesita hacer que TextView se desplace verticalmente automáticamente
  • Ellipsize de TextView no funciona en maxLines = 1
  • Textview.getLineCount siempre 0 en android
  • Actualización de Textview en una actividad con servicio local
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.