2011-02-17 23 views
40

Esto está en una extensión de TextView. getTextSize() y setTextSize() no se anulan, no extiendo esos métodos. Programación en 1,6, el nivel API 4.Android TextView setTextSize aumenta incorrectamente el tamaño del texto

El bucle en este código hace que el tamaño para ser multiplicado por 1.5 cada vez que se itera, por ejemplo si el tamaño lee inicialmente 200 del getTextSize, a continuación, se llama setTextSize(size), getTextSize llamado de nuevo vuelve a leer 300.

public void shrinkTest() { 
    float size = this.getTextSize(); 
    while (size > 8) { 
     this.setTextSize(size); 
     size = this.getTextSize(); 
    } 
} 

¿Por qué es esto?

Respuesta

141

Heh, problema de unidades mixtas. Parece un poco contradictorio, pero es una solución fácil. El método predeterminado setTextSize(float) supone que está ingresando sp unidades (píxeles escalados), mientras que el método getTextSize() devuelve un tamaño de píxel exacto.

Puede solucionar este problema mediante el uso de la alternativa setTextSize(TypedValue, float), así:

this.setTextSize(TypedValue.COMPLEX_UNIT_PX, size); 

Esto se asegurará de que está trabajando con las mismas unidades.

19

setTextSize() y getTextSize() trabajo con diferentes unidades. El parámetro para establecer() es "píxeles escalados" independientes de la densidad, mientras que get() devuelve píxeles antiguos simples.

+2

golpeados con el punzón. : P – kcoppock

+4

¡Hah, pensé que solo me había pasado a mí! Ten un voto positivo para tu respuesta un poco más útil ... –

3

unidades de paso con el tamaño utilizando TypedValue, como a continuación:

TypedValue.COMPLEX_UNIT_PX // Píxeles

TypedValue.COMPLEX_UNIT_SP // píxeles Scaled

TypedValue.COMPLEX_UNIT_DIP // Dispositivos Píxeles independientes

SetTextSize (TypedValue.COMPLEX_UNIT_SP, 18)

Cuestiones relacionadas