2015-10-17 1 views
0

J'écrivais une application Android. Je essentiellement créé la ressource dimen suivante:Pourquoi la ressource dimen est-elle incohérente et comment obtenir la valeur correcte?

<dimen name="button_text_size">11pt</dimen> 

Et je l'utilise à la fois mon xml et du code Java pour créer un Button et un TextView qui taille du texte est 11pt. Voici comment je l'ai fait:

XML

<Button 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:textSize="@dimen/button_text_size" 
     android:text="secret!" 
     android:layout_margin="@dimen/button_margin" 
     android:background="secret!" 
     android:layout_weight="1" 
     android:onClick="secret!"/> 

code Java

TextView text = new TextView (this); 
     text.setLayoutParams (new LinearLayout.LayoutParams (0, ViewGroup.LayoutParams.WRAP_CONTENT, 3)); 
     text.setText (secret); 
     text.setTextSize (getResources().getDimension (R.dimen.button_text_size)); 

En théorie, le texte des deux vues devrait être de la même taille. Mais la taille du texte de la vue de texte semble être plus grande! Je ne sais pas pourquoi cela arrive. Je suppose que c'est à cause de certains problèmes avec les unités, mais qu'est-ce qui se passe réellement? Comment obtenir les valeurs correctes?

Répondre

2

essayer cette

textView.setTextSize(TypedValue.COMPLEX_UNIT_PX,getResources().getDimension(R.dimen.button_text_size)); 

et mieux utiliser sp ("pixel échelle") comme la taille du texte selon la documentation android http://developer.android.com/intl/es/reference/android/widget/Button.html

+0

Juste une question de plus, si j'utilise sp, suis-je capable d'utiliser la méthode dans ma question? Je veux dire la surcharge setTextSize (float). – Sweeper

+0

oui vous pouvez utiliser la méthode setTextSize, ou vous voulez demander autre chose? – Pavan

+1

Merci pour votre réponse! – Sweeper

1

Utilisation dp or dip au lieu de pt

<dimen name="button_text_size">11dp</dimen> 
+1

Bien que je ne sais pas grand-chose au sujet de la unités, je suis sûr que dp n'est pas égal à pt. Puis-je continuer à utiliser pt? – Sweeper

+0

@Sweeper Pour une meilleure approche Vous passez à utiliser 'dp' –

+0

http://developer.android.com/intl/es/reference/android/widget/TextView.html#attr_android:textSize –

0

dp/dip: Pixels indépendants de la densité - Une unité abstraite qui est basé sur la densité physique de l'écran. Ces unités sont relatives à un écran (points par pouce) de 160 dpi, sur lequel 1dp est approximativement égal à 1px. Lorsque s'exécute sur un écran de densité supérieure, le nombre de pixels utilisés pour dessiner 1dp est augmenté d'un facteur approprié pour la résolution de l'écran. De même, lorsque sur un écran de densité inférieure, le nombre de pixels utilisés pour 1dp est réduit.

D'autre part

pt: Points - 1/72 de pouce en fonction de la taille physique de l'écran.


px: Pixels - correspond à des pixels réels sur l'écran. Cette unité de mesure n'est pas recommandée car la représentation réelle peut varier sur tous les périphériques;

donc pt et px variera un écran à l' en dp **/dip gérer en fonction de l'écran. ** .. si vous voulez la taille cohérente à travers l'écran différent de celui pour aller dp/dip

pour plus sur les dimensions refer
changer donc de 11pt à 11dp en XML cela vous aidera
Mais dynamiquement considéré comme valeur flottante en termes de px ... alors allez solution fournir par pavane comme dans

textView.setTextSize(TypedValue.COMPLEX_UNIT_PX,getResources().getDimension(R.dimen.button_text_size)); 

Optez pour l'une des valeurs ci-dessous.

textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP,getResources().getDimension(R.dimen.button_text_size)); 

textView.setTextSize(TypedValue.COMPLEX_UNIT_SP,getResources().getDimension(R.dimen.button_text_size));