J'ai variable à dimens.xml
<resources>
<dimen name="btn_text_size">12sp</dimen>
</resources>
Et je peux l'utiliser dans un fichier de mise en page:
<TextView
Android:textSize="@dimen/btn_text_size"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="@string/dialog_tags_complete"
/>
ou par programmation
tagButton.setTextSize(c.getResources().getDimension(R.dimen.tag_text_size));
Mais ces 2 méthodes donnent des résultats différents. Je sais que getDimension
sont basés sur les DisplayMetrics actuels associés aux ressources.
Mais que dois-je faire pour que ces deux manières aient le même aspect?
setTextSize( float )
attend une valeur de pixel mise à l'échelle. Donc, setTextSize( 12 )
vous donnerait le résultat souhaité. Cependant, getDimension()
et getDimensionPixelSize()
renvoient la taille en unités de pixels. Vous devez donc utiliser la variante de setTextSize()
, typée en unités, comme suit:
setTextSize( TypedValue.COMPLEX_UNIT_PX, getDimensionPixelSize( R.dimen.tag_text_size ) );
tagButton.setTextSize(c.getResources().getDimensionPixelSize(R.dimen.tag_text_size));
cela fonctionnera très bien:) Vous devriez également vous rappeler que textView a un setTextSize (unité int, taille float), qui doit être utilisé lors de la définition de la taille à partir de code mais pas à partir de xml dimen.
J'ai actuellement la même chose. A défini une dimension dans dimens.xml et l’a appliquée par programme, ce qui est 3 fois plus grand que lors de la configuration via XML.
J'ai vérifié aussi:
TextView.getTextSize() = 92f
getResources().getDimension(R.dimen ...) = 92f
TextView.setTextSize (92)! = TextView de taille XML, d'autres indicateurs tels que TypedValue.COMPLEX_UNIT_PX l'agrandissent encore.
La valeur par défaut setTextSize applique COMPLEX_UNIT_SP par défaut, btw. Donc, encore une fois, l'API Android est incohérente, donc ma solution consiste à configurer uniquement à l'aide de programmes et à adapter les tailles, afin qu'elles correspondent.
Éditer: Régler la taille du texte par programme sous Galaxy Note 2 (4.4.2) vs Note 4 (5.0.1) conduit à un résultat totalement différent -.-