C'est dans une extension de TextView. getTextSize()
et setTextSize()
ne sont pas surchargés, je ne développe pas ces méthodes. Programmation en 1.6, API niveau 4.
La boucle de ce code entraîne la multiplication de la taille par 1,5 à chaque itération, par ex. si size lit initialement 200 à partir de getTextSize
, alors setTextSize(size)
est appelée, getTextSize
appelée à nouveau lit 300.
public void shrinkTest() {
float size = this.getTextSize();
while (size > 8) {
this.setTextSize(size);
size = this.getTextSize();
}
}
Pourquoi est-ce?
Hé, problème d'unités mixtes. Cela semble un peu contre-intuitif, mais c'est une solution facile. La méthode par défaut setTextSize(float)
suppose que vous saisissez sp
unités (pixels mis à l'échelle), tandis que la méthode getTextSize()
renvoie une taille de pixel exacte.
Vous pouvez résoudre ce problème en utilisant l'alternative setTextSize(TypedValue, float)
, comme ceci:
this.setTextSize(TypedValue.COMPLEX_UNIT_PX, size);
Cela garantira que vous travaillez avec les mêmes unités.
setTextSize()
et getTextSize()
fonctionnent avec différentes unités. Le paramètre à définir () est des "pixels mis à l'échelle" indépendants de la densité, tandis que get () renvoie des pixels anciens simples.
passez les unités avec la taille en utilisant TypedValue comme ci-dessous:
TypedValue.COMPLEX_UNIT_PX // Pixels
TypedValue.COMPLEX_UNIT_SP // Pixels mis à l'échelle
TypedValue.COMPLEX_UNIT_DIP // Pixels indépendants du périphérique
setTextSize (TypedValue.COMPLEX_UNIT_SP, 18)