Android TextView setTextSize augmente incorrectement la taille du texte [dupliquer]

cette question a déjà une réponse ici:

c'est une extension de TextView. getTextSize() et setTextSize() ne sont pas dépassés, je le fais ne pas étendre ces méthodes. Programmation en 1.6, niveau 4 de L'API.

la boucle de ce code fait que la taille est multipliée par 1,5 chaque fois qu'elle est itérée, par exemple si la taille Lit initialement 200 de getTextSize , alors setTextSize(size) est appelé, getTextSize appelé à nouveau lit 300.

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

pourquoi?

45
demandé sur phi 2011-02-17 20:28:08

3 réponses

problème d'unités mixtes. 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 gradués), tandis que la méthode getTextSize() renvoie une taille de pixel exacte.

vous pouvez corriger cela en utilisant l'alternative setTextSize(TypedValue, float) , comme suit:

this.setTextSize(TypedValue.COMPLEX_UNIT_PX, size);

cela vous permettra de travailler avec les mêmes unités.

144
répondu kcoppock 2011-02-17 17:34:26

setTextSize() et getTextSize() fonctionnent avec des unités différentes. Le paramètre à définir () est indépendant de la densité, "scaled pixels", alors que get () renvoie simplement les vieux pixels.

19
répondu Reuben Scratton 2011-02-17 17:33:12

passer des unités de taille en utilisant la valeur typée comme ci-dessous:

TypedValue.COMPLEX_UNIT_PX / / Pixels

TypedValue.COMPLEX_UNIT_SP / / Scaled Pixels

TypedValue.COMPLEX_UNIT_DIP / / Device Independent Pixels

setTextSize (TypedValue.COMPLEX_UNIT_SP, 18)

3
répondu user3763203 2016-06-23 10:14:29