Android: la altura de TextView no cambia después de reducir el tamaño de fuente

Cuando hago clic en el botón, el tamaño de la fuente se reduce a 12. Sin embargo, el resultado es:

Introduzca aquí la descripción de la imagen

main.xml

<?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/test" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="40sp" android:background="#80ff0000" android:text="@string/hello" /> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" /> </LinearLayout> 

Java:

 public class FontSizeTestActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final TextView text = (TextView) findViewById(R.id.test); Button button1 = (Button) findViewById(R.id.button1); button1.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { text.setTextSize(12); } }); } } 

¿Cómo puedo reducir la altura de la textView para que sólo envuelve la fuente real?

Así que, después de una larga búsqueda he encontrado una solución. Cada vez que se establece el texto:

 setText("I am a Text",TextView.BufferType.SPANNABLE); 

O después de cambiar el tamaño de su texto, haga lo siguiente:

 setText(getText(),TextView.BufferType.SPANNABLE); 

Finalmente, encontré la razón / solución !!!

Se trata de un error conocido para Android 3.1+

Número 17343

Número 22493

Posible solución son:

 text.setText(text+"\n"); 

o

 final String DOUBLE_BYTE_SPACE = "\u3000"; text.setText(text + DOUBLE_BYTE_SPACE); 

En lugar de usar:

 final String DOUBLE_BYTE_SPACE = "\u3000"; text.setText(text + DOUBLE_BYTE_SPACE); 

Mejor uso:

 final String DOUBLE_BYTE_WORDJOINER = "\u2060"; text.setText(text + DOUBLE_BYTE_WORDJOINER); 

Información adicional: Word Joiner tiene 0 ancho de espacio.

Encontré que agregar el carácter "\ u200b" no aparece como un carácter roto, ni agrega un whitespace / linebreak.

Para más detalles sobre el "ESPACIO DE ANCHURA CERO" vea: http://www.fileformat.info/info/unicode/char/200b/index.htm

intenta invocar invalidate () o una variante de invalidate (). Desde los desarrolladores de android:

public void invalidate ()

Desde: API Nivel 1 Invalide la vista completa. Si la vista es visible, onDraw (android.graphics.Canvas) será llamado en algún momento en el futuro. Esto se debe llamar desde un subproceso de interfaz de usuario. Para llamar desde un subproceso no UI, llame a postInvalidate ().

http://developer.android.com/reference/android/view/View.html#invalidate ()

Tal vez la configuración de la vista a View.GONE, el cambio de tamaño de texto, a continuación, establecer a View.VISIBLE funcionaría?

En el archivo main.xml tamaño TextView dado android: textSize = "40sp" . y en lado java, haga clic en el botón cambiar el valor aquí

  public void onClick(View v) { text.setTextSize(12); } 
  • Android desaparece porciones de TextViews
  • Recurso no encontrado TextView
  • Wrappable TextView con SpannableStringBuilder y ImageSpan esconde la última imagen en cada línea
  • dinámicamente establecer el símbolo de moneda
  • Android - divisor entre elementos en disposición vertical
  • Romper una línea sin aumentar la longitud del texto
  • Los enlaces de Android TextView no se resaltan cuando se hace clic
  • El texto de TextView se reduce al ancho dado
  • android uso de etiquetas html en textview mediante programación
  • Elipses de desvanecimiento de varias líneas en un TextView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.