2012-03-02 13 views
15

Cuando hago clic en el botón, el tamaño de la fuente se reduce a 12. Sin embargo, el resultado es:Android: altura TextView no cambia después de la reducción del tamaño de la fuente

enter image description here

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 Shri nk la altura de textView para que solo envuelva la fuente real?

+0

Acabo de probar su código y funciona como debería. ¿Qué versión de Android estás usando? – caiocpricci2

+0

Probé en Android 3.2 y 4.0 – jclova

+0

Ninguna de estas soluciones funciona para mí en ninguna versión de Android. T__________T – Magicode

Respuesta

5

Finalmente, encontré el motivo/solución !!!

Esto es un error conocido para Android 3.1+

Issue 17343

Issue 22493

solución posibles son:

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

o

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

Excelente hallazgo sobre los problemas. El uso de los mencionados \ u3000 o \ u2060 produce un espacio o un carácter de "caja" al final de la cadena , dependiendo de la fuente del dispositivo. Así que agregar algo no es confiable. – Moritz

+0

La respuesta de Moritz es más correcta: agregar "(no crea una caja rota para algunos dispositivos) – jclova

0

Tal vez configurar la vista en View.GONE, cambiar el tamaño de texto, y luego configurar View.VISIBLE funcionaría?

+0

no, sigue siendo el mismo :( – jclova

0

En main.xml tamaño del archivo de Vista de Texto dada androide: TEXTSIZE = "40sp". y en Java lateral, haga clic en el botón cambiar el valor aquí

public void onClick(View v) { 

      text.setTextSize(12); 
     } 
1

intentar llamar invalida() o una variante de invalidate(). a partir de documentos de desarrolladores de Android:

pública invalidate vacío()

desde: Nivel 1 API de invalidar por completo la vista. Si la vista es visible, se llamará a onDraw (android.graphics.Canvas) en algún momento en el futuro. Esto debe invocarse desde un subproceso de interfaz de usuario. Para llamar desde un hilo que no sea UI, llame a postInvalidate().

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

+0

eso es lo primero que intenté, sin suerte. – jclova

5

En lugar de utilizar:

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); 

Mas información: Word Joiner es 0 espacio de ancho.

+1

Esto funcionó perfectamente para mí al agregar" \ n "no lo hice. – tmanthey

+0

gracias, ¿por qué no vi esto antes? ¿Hay alguna nota en la documentación de Android sobre esto? – deadfish

+0

Eso no funciona realmente. Causa 2 problemas. Si alinea o centra el texto, verá que "0 Ancho" es mito en la mayoría de los dispositivos. En un Samsung Galaxy S2 con Android 2.3.3, incluso apareció como un rectángulo visible. – tmanthey

22

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

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

O después de cambiar el tamaño de texto que acaba de hacer:

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

Perfecto, esta es la solución correcta. Realmente simple – Corbella

+0

Bueno, aceptado Respuesta – Farhan

+0

Muy simple, muy estúpido. Ya pasé mucho tiempo (demasiado, creo), pero has guardado más ... – kpower

Cuestiones relacionadas