web-dev-qa-db-fra.com

Définir la taille du texte au format .xml ou par programme

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?

19
Suvitruf

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 ) );
35
323go
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.

3
Mark

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 -.-

0
Jan Ni