web-dev-qa-db-fra.com

Android TextView setTextSize augmente incorrectement la taille du texte

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?

46
Nathan Fig

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.

148
kcoppock

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.

21
Reuben Scratton

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)

5
user3763203