276 L’art du développement Android
Pour avoir le maximum de contrôle sur les règles, l’idéal serait de créer votre propre classe de
layout. Si, par exemple, vous développez une suite d’applications de jeux de cartes, il serait
préférable de disposer d’une classe spécialisée dans le placement des cartes – la façon qu’elles
ont de se recouvrir, le placement des cartes retournées ou non, la façon de prendre plusieurs
cartes à la fois, etc. Même si vous pourriez obtenir l’aspect recherché avec un
RelativeLayout
,
par exemple, vous auriez intérêt à implémenter une classe
PlayingCardLayout
spécialement
conçue pour ce genre d’applications. Malheureusement, il n’existe pas toujours de documentation
concernant la création de ces layouts personnalisés.
Utiliser des dimensions physiques
Android permet d’exprimer les dimensions dans un grand nombre d’unités. La plus utilisée était
le pixel (
px
) car on se le représente facilement mentalement: les dimensions des écrans Android
sont d’ailleurs exprimées en nombre de pixels en largeur et en hauteur.
Cependant, les pixels commencent à poser problème lorsque la densité des écrans change. En
effet, la taille des pixels diminue à mesure que le nombre de pixels augmente pour une taille
d’écran donnée: une icône de 32pixels sur un terminal Android classique peut convenir aux
touchés alors que, sur un écran à haute densité (un téléphone mobile WVGA, par exemple), elle
peut être trop petite pour être manipulable au doigt.
Si vous avez exprimé en pixels la taille d’un widget comme un bouton, utilisez plutôt des
millimètres (
mm
) ou des pouces (
in
) comme unité de mesure: 10millimètres feront toujours
10millimètres, quelle que soit la résolution et la taille de l’écran. Vous pouvez ainsi garantir
que ce widget conviendra toujours à une manipulation tactile, quel que soit le nombre de pixels
qu’il occupera.
Éviter les "vrais" pixels
Dans les cas où exprimer une dimension en millimètres n’aurait aucun sens, vous pouvez quand
même utiliser d’autres unités de mesure et éviter les "vrais" pixels.
Android permet d’exprimer les dimensions en pixels indépendants de la densité (
dip
, pour density-
independent pixel). Ces pixels correspondent exactement aux vrais pixels sur un écran de 160dpi
(celui d’un terminal HVGA classique, par exemple) et s’adaptent ensuite en conséquence. Sur
un écran de 240dpi (celui d’un téléphone WVGA, par exemple), un
dip
correspond à 1,5
px
:
50
dip
correspondent donc à 50
px
à 160dpi et à 75
px
à 240dpi. L’avantage des
dip
est donc
que la taille réelle de la dimension reste la même et qu’il n’y a aucune différence visuelle entre
50
dip
à 160dpi et 50
dip
à 250dpi.
Android autorise également les scaled pixels (
sp
), dont l’échelle dépend, en théorie, de la taille
de la police choisie (la valeur
FONT_SCALE
dans
System.Settings
).
Choisir des images adaptables
La taille des images bitmaps – PNG, JPG, BMP et GIF – ne s’adapte pas naturellement, pas
plus que le dernier format d’image reconnu par Android 4.0, WEBP. Si vous n’utilisez pas le
mode compatible, Android n’essaiera donc même pas de les adapter à la résolution et à la taille
LIVRE-2557-Android 4.indb 276 24/10/12 09:18
© 2012 Pearson France – L'art du développement Android, 4e édition – Grant Allen