Incohérence lors de la définition de la taille de la police TextView dans le code et dans les ressources

La documentation officielle ne semble pas répondre à cela, ou je n’arrive pas à le comprendre.

Elément (même si AlertDialog , ça arrive aussi sur n’importe quel TextView):

 TextView tv = (TextView) dialog.findViewById(android.R.id.message); 

Incohérence. Cas A:

 tv.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14); // or tv.setTextSize(14); does the same 

Cas B:

 tv.setTextSize(getResources().getDimension(R.dimen.text_size_small)); // TypedValue makes no difference either. 

values/dimens.xml a:

 14sp 

Résultat: la taille de la police n’est pas la même et apparaît beaucoup plus grande lors de la récupération de la ressource. Je manque probablement quelque chose, alors quelle est mon erreur et la plus importante: pourquoi?

MISE À JOUR DE LA PREMIÈRE RÉPONSE

Le nombre fixe n’était qu’un exemple, car personne ne coderait en dur les tailles de police fixes dans le code. Alors laissez-moi reformuler la question:

Pourquoi si j’obtiens la ressource à partir du code, la taille du texte est plus grande que lorsque je récupère la ressource à partir d’une mise en page XML? En outre, la question est toujours la même: comment récupérer une unité 14sp dans le code et la maintenir cohérente avec l’unité 14sp définie dans le XML de présentation? Je n’ai pas accepté la réponse car elle ne me dit pas comment utiliser les unités sp de la ressource dans le code pour la taille du texte.

Sur cette disposition, la taille de la police est différente, même si la dimension est la même:

  

styles.xml:

  @dimen/text_size_small 1.1 @color/body_text_1 true true  

Voir text_size_small là? Pourquoi dans ce cas la taille de la police est plus petite que dans le code, en utilisant la même ressource de dimen ?

Vous devez utiliser setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize); car la documentation de la méthode getDimension indique qu’elle renvoie une Resource dimension value multiplied by the appropriate mesortingc. ce que je comprends être la valeur de px absolu précalculée.

C’est-à-dire, utilisez:

 tv.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.text_size_small)); 

D’une certaine manière, cela semble correspondre:

XML:

   9sp  

Java:

 setTextSize(TypedValue.COMPLEX_UNIT_SP, 9); setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimensionPixelSize(R.dimen.typo14)); 

C’est une question de sp px dpi

 tv.setTextSize(14) = 14 pixels