EDIT: Merci pour toutes vos réponses et commentaires. Après y avoir réfléchi, je reformulerais le cœur de la question comme suit: "Comment déterminer et limiter la résolution/le ratio minimum sur lequel mon jeu peut fonctionner". Parce que imo, soit le jeu devient injouable sur le plus petit écran/rapport (manque de détails), soit même en prenant en charge le plus petit écran/rapport dégrade considérablement l'expérience pour tous les autres. En outre, nous ne savons même pas quelle est la plus petite résolution ou pouvons la restreindre de toute autre manière que la désactivation de ldpi ... ce qui ne nous dit toujours pas sur la plus petite mdpi. Après tout, je ne pense pas à la façon de créer un bon résultat mais à la façon de créer un résultat parfait;). Je suppose que ce n'est pas possible (encore?).
Remarque: Il s'agit purement de téléphones et non de tablettes. Cette question n'est pas aussi pertinente pour les applications que pour les jeux qui n'utilisent pas le Android.
J'ai toujours trouvé les définitions des résolutions auxquelles s'attendre un peu vagues. Je connais la liste dans les documents.
Maintenant, ma première question est de savoir si cette liste est complète ou, en d'autres termes, si le fabricant est autorisé à utiliser d'autres résolutions ou proportions. Mon approche actuelle consiste à voir cette liste en termes de rapports d'aspect qui ressemble à quelque chose comme ça (Je ne sais pas si c'est exact mais vous avez l'idée):
Donc, si je veux couvrir une gamme d'appareils, je trouve quels sont mes plus petits et mes plus grands rapports d'aspect et je conçois la disposition pour les plus petits tout en la faisant automatiquement grandir. Par exemple, si je veux prendre en charge toutes les densités, je conçois les écrans pour 4: 3 et les fais grandir à 16: 9. Dans le cas où je supprimerais le support ldpi, je concevoirais pour 3: 2. Bien sûr, cela suppose qu'il n'y aura jamais de périphérique mdpi avec un rapport d'aspect de 4: 3, ce qui nous ramène à ma première question.
Ma solution préférée serait d'indiquer sur le Android Market quels formats d'image mon application peut gérer mais cela ne semble pas possible jusqu'à présent.
Quelqu'un at-il une meilleure approche? (Gardant à l'esprit que c'est uniquement pour les jeux sur téléphones)
J'ai trouvé une réponse claire au problème.
Les résolutions minimales ne sont pas définies avant 3.0. Ainsi, pour 3.0 et au-dessus, il sera possible de choisir une résolution minimale, de concevoir un jeu en fonction de celui-ci et de développer la mise en page de manière dynamique sur des écrans/ratios plus grands, comme mentionné par superM et d'autres.
Lorsque vous concevez votre interface utilisateur pour différentes tailles d'écran, vous découvrirez que chaque conception nécessite un minimum d'espace. Ainsi, chaque taille d'écran généralisée ci-dessus a une résolution minimale associée qui est définie par le système. Ces tailles minimales sont en unités "dp" - les mêmes unités que vous devez utiliser lors de la définition de vos dispositions - ce qui permet au système d'éviter de se soucier des changements de densité d'écran.
- les grands écrans sont au moins 960dp x 720dp
- les grands écrans mesurent au moins 640dp x 480dp
- les écrans normaux sont au moins 470dp x 320dp
- les petits écrans sont au moins 426dp x 320dp
Remarque: Ces tailles d'écran minimales n'étaient pas aussi bien définies avant Android 3.0 , vous pouvez donc rencontrer certains appareils mal classés entre normal et grand. Ils sont également basés sur la résolution physique de l'écran, ils peuvent donc varier d'un appareil à l'autre, par exemple une tablette 1024x720 avec une barre système a en fait un peu moins d'espace disponible pour l'application en raison de son utilisation par la barre système.
Je ne peux pas répondre directement à votre question, mais je voudrais vous expliquer mon approche. J'essaie de ne pas utiliser de chiffres du tout. Au lieu de cela, j'essaie d'utiliser des rembourrages, des marges et des dispositions relatives pour que mes vues apparaissent correctement sur n'importe quel téléphone. Cela m'aide également à éviter de créer une vue pour différentes orientations.
Comme beaucoup de personnes ici mentionnées précédemment, mon approche consisterait également à utiliser pleinement les composants indépendants du périphérique, tels que les paddins, les marges et les délais relatifs, combinés aux puxels indépendants du périphérique.
Franchement, et j'espère que je ne suis pas le seul, mais que je profite pleinement des DIP (pixels indépendants du périphérique) et de la mise en page relative et ainsi de suite ... a réduit mes fichiers de mise en page d'activité à 1 par activité au lieu de 3 types différents pour HDPI, MDPI et LDPI.
dans le cas où vous êtes vraiment préoccupé par le rapport d'aspect, vous pouvez toujours appeler les propriétés d'affichage en pixels de l'appareil et effectuer des calculs de mise en page appropriés en fonction de ces chiffres. Vous pouvez appeler cela au tout début de la méthode onCreate de votre première activité.
Display display = getWindowManager().getDefaultDisplay();
int displayWidth = display.getWidth();
int displayHeight = display.getHeight();
cela vous donnera les valeurs de largeur et de hauteur de votre matériel siplay en pixels. À mon avis, la vraie raison pour laquelle vous choisiriez plus de 3 types de mise en page est de vous assurer que la résolution de l'image reste suffisamment nette.
Avec ces chiffres, vous pouvez créer une logique interne, qui calcule quel type d'images de résolution à charger dans certains widgets. Vous évitant ainsi d'avoir à faire 3 fois la même mise en page ....
peut-être expliqué un peu cryptique, mais la chose principale pour surmonter les différentes résolutions de périphérique est de travailler beaucoup avec:
vous pouvez également définir des DIP dans la disposition XML, de sorte que chaque composant soit identique sur chaque type de périphérique.
peut-être un exemple stupide, mais bon, cela a fonctionné pour moi :-) ici-bas, j'ai essayé d'obtenir que la taille du texte sur une vue de texte soit relativement la même sur tous les appareils. Vous pouvez appeler la classe "TypedValue" et sélectionner l'une des nombreuses variables publiques qui y sont proposées. Comme je voulais faire du TextView partout la même taille relative, j'ai utilisé le code ci-dessous:
someTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 18);
le nombre est de définir la taille de la taille des DIP. TypedValue peut être utilisé dans de nombreux composants de widget ou d'activité qui nécessitent une valeur INT pour les propriétés dimensionnelles. Jouez avec ça et vous verrez que cela vous facilite la vie :-p
j'espère que cette réponse aide un peu
Il n'y a pas de liste exhaustive des proportions. Les fabricants peuvent décider de la résolution qui leur convient. En plus de cela, les rapports d'aspect ne correspondent pas à la densité de pixels, donc utiliser ldpi/mdpi/hdpi pour décider du rapport d'aspect n'est probablement pas une bonne idée.
Votre stratégie pour gérer cela dépend vraiment de votre jeu. Bien sûr, dans une certaine mesure, vous devez simplement mettre à l'échelle tout ce qui est plus grand/plus petit, mais les parties délicates sont évidemment les bords qui sont différents selon différents rapports d'aspect. Certains jeux (tireurs à la première personne, défileurs latéraux, jeux top-down en mosaïque, etc.) vous permettent simplement de fournir un champ de vision différent sans trop de problème tant que vous ne vous souciez pas de donner un avantage à certains appareils, par exemple d'autres, vous pourriez envisager d'avoir un graphique extensible ou mosaïque pour l'arrière-plan et conserver la même zone de jeu efficace (mise à l'échelle).
Vous pouvez essayer de demander dans GameDev.stackexchange.com
Voici un problème similaire au vôtre: construction d'un jeu pour différents téléphones de résolution
Vous pouvez limiter les appareils qui peuvent voir votre jeu sur le marché en fonction de la résolution de l'écran: http://developer.Android.com/guide/appendix/market-filters.html
Je ne l'ai pas approfondi, mais je ne vois malheureusement aucune mention du rapport d'aspect, vous devrez donc peut-être remplir tous ceux que vous savez fonctionner.
À défaut, vous pouvez définir une résolution minimale dont vous avez besoin pour que vos graphiques soient beaux et si vous ne voulez pas changer le jeu pour les ratios plus petits, vous pouvez ajouter des bordures noires comme elles le feraient sur les jeux sur console. Ce n'est pas recommandé cependant, l'espace d'écran mobile est suffisamment précieux, donc si vous coupez la zone de jeu avec des barres noires, je déplacerais votre HUD dans la zone noire afin que vous utilisiez toujours autant d'écran que possible.
Il y a plus d'informations sur la prise en charge des tailles d'écran ici: http://developer.Android.com/guide/practices/screens_support.html
: RÉ