tamaño - poner borde a un textview android
El TextView cursivo con wrap_contents parece recortar el texto en el borde derecho (11)
Agregué " /"
al final de todas las cadenas en my strings.xml. /
es el personaje de escape, así que de esta forma pude resolver el problema, pero esta solución es desagradable. Espero que esto ayude.
<TextView android:id="@+id/prodLbl"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:textColor="#FFFFFF"
android:textSize="30dip"
android:textStyle="italic"
android:text="Magnifico"
/>
Parece recortar algunos píxeles del personaje situado más a la derecha, al menos en el emulador de 480x800 o Nexus One.
Para mí, parece un error, pero solo soy un principiante de Android. Traté de agregar márgenes a la izquierda y a la derecha, pero aún así se mantuvo en recorte. Al final, mi truco fue añadir un solo espacio en ambos lados del texto. ¿Alguna otra solución?
Agregue un relleno de 3dp a la derecha en su TextView. Intenté con 1dp y 2dp, pero 3dp parecía hacer el truco completamente.
android:paddingRight="3dp"
Al mirar la fuente, descubrí que establecer una sombra extiende el rectángulo del clip.
Un truco es establecer una sombra invisible justo más allá del personaje.
Por ejemplo:
android:shadowRadius="2"
android:shadowDx="2"
android:shadowColor="#00000000"
Creo que esta solución es mejor ya que no ampliará el ancho del TextView
que puede ocurrir al agregar un carácter extra (que es más evidente con un fondo).
Esta es mi solución: formatear la vista de texto y medir. Después de establecer el ancho de la vista de texto con 1 píxel, agregue el ancho medido.
TextView textView = new TextView(this);
textView.setText("Text blah blah");
textView.setTypeface(typeface, Typeface.BOLD_ITALIC)
textView.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED);
textView.setLayoutParams(new LayoutParams(textView.getMeasuredWidth() + 1,
LayoutParams.WRAP_CONTENT));
Trabajando para mi Espero que esto ayude
Esto también se aplica a TextViews de ancho fijo, no solo a "wrap_content". No estoy seguro si el problema es específico de la versión, como algunos comentaristas han aludido. Veo el problema en todas las versiones de Honeycomb. Por lo que he visto, el problema no desaparece al establecer margen, relleno, utilizando un tipo de letra personalizado de ancho fijo o cursiva real.
Puede agregar un ESPACIO DE CABELLO a su cadena
<string name="hair_space"> </string>
String hairSpace = getContext().getString(R.string.hair_space);
textView.setText(hairSpace + originalString + hairSpace)
Se encontró otra solución (probada en 4.1.2 y 4.3 al usar wrap_content
). Si extiende la clase TextView
o EditText
, puede anular el método de onMeasure
esta manera:
@Override
protected void onMeasure(final int widthMeasureSpec, final int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
final int measuredWidth = getMeasuredWidth();
final float tenPercentOfMeasuredWidth = measuredWidth * 0.1f;
final int newWidth = measuredWidth + (int) tenPercentOfMeasuredWidth;
setMeasuredDimension(newWidth, getMeasuredHeight());
}
Simplemente agregue un espacio extra al final del texto. En XML, deberá agregar /u0020
al final, ya que, de lo contrario, XML /u0020
los espacios en blanco al principio / final de manera predeterminada.
También puede usar el carácter espacio no-break de Unicode (/ u00A0).
También tuve el mismo problema y usé una entidad espacial no disruptiva a través de HTML:
textView.setText("Magnifico" + Html.fromHtml(" ");
android:layout_width="wrap_content"
, le da un rectángulo para el procesamiento de contenidos envueltos. Todo funcionará bien para texto normal (sin cursiva).
Una vez que tiene el texto en italic
habilitado, el texto envuelto intentará encajar en el rectángulo y, por lo tanto, el carácter situado más a la derecha se cortará a menos que no se pueda cortar (como .
, )
, 1
, etc.)
La solución como se sugiere es tener un espacio al final del texto (¿o algo mejor?)
PD: Esto se aplica a android:gravity="right"
también porque el texto será empujado a la derecha. Si tenemos texto en italic
, enfrentamos el mismo problema.