Le documentation officielle ne semble pas répondre à cela, ou je ne peux pas le comprendre.
Élément (peu importe le AlertDialog
, cela se produit également 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.
où values/dimens.xml
a-t-il:
<dimen name="text_size_small">14sp</dimen>
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 à partir de la ressource. Il me manque probablement quelque chose, alors quelle est mon erreur, et le plus important: pourquoi?
- MISE À JOUR DE LA PREMIÈRE RÉPONSE -
Le nombre fixe n'était qu'un exemple, car personne ne coderait en dur des tailles de police fixes dans le code. Permettez-moi donc de reformuler la question:
Pourquoi si j'obtiens la ressource à partir du code, la taille du texte est plus grande que lorsque j'obtiens la ressource à partir d'une disposition XML? En outre, la question est toujours la idem: comment récupérer une unité 14sp dans le code et la garder cohérente avec l'unité 14sp définie dans le XML de mise en page? Je n'ai pas accepté la réponse car elle ne me dit pas comment utiliser les unités sp de ressource dans le code pour la taille du texte.
Sur cette mise en page, la taille de police est différente, même si la dimension est la même:
<TextView
Android:id="@+id/my_text"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
style="@style/TextBody" />
styles.xml:
<style name="TextBody">
<item name="Android:textSize">@dimen/text_size_small</item>
<item name="Android:lineSpacingMultiplier">1.1</item>
<item name="Android:textColor">@color/body_text_1</item>
<item name="Android:textIsSelectable">true</item>
<item name="Android:linksClickable">true</item>
</style>
Voir text_size_small là-bas? Pourquoi dans ce cas la taille de police est plus petite que dans le code, en utilisant la même ressource dimen
?
Vous devez utiliser setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize);
car la documentation de la méthode getDimension
indique qu'elle renvoie un Resource dimension value multiplied by the appropriate metric.
que je comprends être la valeur px absolue précalculée.
Autrement dit, utilisez:
tv.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.text_size_small));
D'une certaine manière, cela semble correspondre:
XML:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="typo14">9sp</dimen>
</resources>
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