Dans dimens.xml, j'ai:
<dimen name="text_medium">18sp</dimen>
Au moment de l'exécution, j'obtiens cette valeur et définit la taille du texte d'une vue de texte:
int size = context.getResources().getDimensionPixelSize(R.dimen.text_medium);
textView.setTextSize(size).
Sur une tablette de 10 pouces (1280 x 800), tout va bien; mais sur un téléphone (800 x 480), la vue texte a une très grande police. Sur la tablette, la taille est égale à 18; au téléphone, il est 27.
Si je règle la taille manuellement par:
textView.setTextSize(size)
la taille est normale sur les deux appareils.
android
textview
dimensions
Yura Shinkarev
la source
la source
TypedValue.COMPLEX_UNIT_SP
place?Resources.getDimension()
méthode renvoie la valeur qui est déjà multipliée par la métrique appropriéeLes deux méthodes getDimensionPixelSize () et getDimension () utilisent la densité d'écran pour calculer les pixels. La densité de l'écran de votre téléphone est évidemment hdpi (240 dpi), il utilise donc une échelle de 1,5 pour convertir dp en sp. Mathématiques simples 18 * 1,5 = 27.
Il semble que la densité de votre tablette soit mdpi (160 dpi), donc l'échelle n'est que de 1: 1.
Mais si vous comparez la taille réelle des deux textes, cela devrait être le même.
Le meilleur moyen consiste simplement à créer deux fichiers dimens.xml, un dans le dossier values pour le téléphone et un autre dans values-sw600dp pour les tablettes (vous pouvez également utiliser le dossier values-sw720dp-land pour stocker les dimensions des tablettes 10 pouces en orientation paysage).
Vous pouvez en savoir plus sur les dimensions dans Android à l' adresse : http://android4beginners.com/2013/07/appendix-c-everything-about-sizes-and-dimensions-in-android/
la source
Vous pouvez utiliser sdp (Scalable Desnsity Pixel) https://github.com/intuit/sdp à la place de dp, cela vous sauvera définitivement la vie
la source