62 votes

Incohérence lors du réglage de la taille de la police du TextView dans le code et dans les ressources

El documentation officielle ne semble pas répondre à cette question, ou je n'arrive pas à la comprendre.

(sans parler de l'élément 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.

values/dimens.xml l'a :

<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. J'ai probablement raté 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 mise en page XML ? Par ailleurs, la question est toujours la même : comment puis-je récupérer une unité 14sp dans le code et la garder cohérente avec l'unité 14sp qui est définie dans le layout XML ? 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 mise en page, la taille de la 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>

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

104voto

maxmc Points 2750

Vous devez utiliser setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize); car la documentation de l getDimension indique qu'elle renvoie un Resource dimension value multiplied by the appropriate metric. qui, si j'ai bien compris, est la valeur absolue précalculée en px.

C'est-à-dire, utiliser :

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

24voto

DaRolla Points 329

D'une certaine manière, ça 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));

2voto

Nikola Despotoski Points 13670

C'est une question de sp px dpi

tv.setTextSize(14) = 14 pixels

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X