justificar - justify textview android example
¿Cómo alinear el texto a la parte superior de TextView? (6)
¿Cómo alinear el texto a la parte superior de un TextView?
API equivalente de Android para Swings setInsets ()?
que la parte superior del texto debería comenzar en (0,0) de TextView
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<TextView
android:id="@+id/text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView"
android:textSize="42sp"
android:paddingTop="0px"
android:gravity="top">
</TextView>
</LinearLayout>
He usado el fragmento de arriba, sin embargo, la salida no es la esperada
¿Algunas ideas?
Creo que tu fragmento es correcto. Supongo que le molestan algunos píxeles entre la parte superior de la letra "T" y el borde superior de TextView. Este espacio es necesario para representar algunas letras que no están presentes en el alfabeto inglés.
Revisa los enlaces para obtener una idea:
En tu .xml, escribe eso:
android:gravity="center|top"
El primer "centro" alinea su línea horizontalmente en el centro y la siguiente "parte superior" se alinea verticalmente hacia arriba.
La fuente real en sí tiene espacio en blanco adicional en la parte superior e inferior, creo.
Por lo general, lo que hago es dar a la vista márgenes negativos. El problema es que esto se ve mal cuando los dispositivos vienen con diferentes tipos de letra.
android:layout_marginTop="-5dp"
android:layout_marginBottom="-5dp"
Tendrá que ajustar en función del tamaño del texto, los tamaños de texto más grandes requieren un relleno más negativo.
No estoy seguro si entiendo lo que quieres decir, pero el texto dentro de la vista de texto se alineará con la parte superior si usas gravedad = arriba en la vista de texto.
Si pones un color backgrund en tu vista textual, verás mejor lo que está sucediendo ...
Supongo que tu problema es que la vista de texto está centrada ya que usas fill_parent en altura y ancho en LinearLayout padre. La vista de texto parece ser la única hija, así que intenta poner gravedad = arriba en LinearLayout ...
Eso es lo único que se me ocurre ...
Por lo tanto, el espacio en la parte superior de TextView es relleno utilizado para caracteres fuera del idioma inglés, como acentos. Para eliminar este espacio, puede configurar el atributo android:includeFontPadding
como false
en su XML o puede hacerlo mediante programación con la función setIncludeFontPadding(false)
.
Mire la documentación SDK para TextView si esto todavía no está claro.
EDITED RESPUESTA
Si configurar el atributo android:includeFontPadding
no logra lo que está intentando hacer, la otra solución es anular el onDraw(Canvas canvas)
del TextView que está utilizando para eliminar el relleno superior adicional que agrega Android a cada TextView. Después de escribir mi respuesta original, noté que, por alguna razón, TextView incluye relleno extra además del relleno de la fuente. La eliminación del relleno de la fuente y de este relleno adicional alinea perfectamente el texto con la parte superior de TextView. Mira el fragmento de código a continuación.
public class TopAlignedTextView extends TextView {
// Default constructor when inflating from XML file
public TopAlignedTextView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
// Default constructor override
public TopAlignedTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs);
setIncludeFontPadding(false); //remove the font padding
setGravity(getGravity() | Gravity.TOP); //make sure that the gravity is set to the top
}
/*This is where the magic happens*/
@Override
protected void onDraw(Canvas canvas){
TextPaint textPaint = getPaint();
textPaint.setColor(getCurrentTextColor());
textPaint.drawableState = getDrawableState();
canvas.save();
//converts 5dip into pixels
int additionalPadding = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 5, getContext().getResources().getDisplayMetrics());
//subtracts the additional padding from the top of the canvas that textview draws to in order to align it with the top.
canvas.translate(0, -additionalPadding);
if(getLayout() != null)
getLayout().draw(canvas);
canvas.restore();
}
}
Posible, no necesita hacer su vista basada en TextView. Intenta extender View y escribe tu texto en onDraw()
.
Mira aquí: https://.com/a/32081250/1263771