Squelette d'application pour prendre en charge plusieurs écrans


92

Comme nous savons qu'Android est fourni avec divers appareils ayant des fonctionnalités, une résolution et une taille d'écran différentes, lors du développement d'une application prenant en charge plusieurs (petits et grands) écrans, il existe un obstacle de taille et de mise en page.

Cela conduit à différentes combinaisons de tailles d'écran, de résolutions et de DPI et crée tout un défi lors de la conception et du développement pour les appareils Android. Alors que certains autres fabricants (non Android) ont des résolutions et des DPI différents, ils partagent la même taille d'écran et les résolutions suivent le même rapport hauteur / largeur. Par conséquent, une image peut être créée pour s'adapter aux appareils non Android.

Ma question est la suivante: existe-t-il un flux ou une architecture appropriée à suivre pour répondre à l'exigence?

entrez la description de l'image ici

N'oubliez pas que nous avons des tablettes de différentes tailles et résolutions.

Je sais que le développeur Android contient ces informations, mais mon point de vue provient de la mise en œuvre.

D'après mes connaissances, ce que j'ai compris, c'est que pour concevoir des graphiques Android, même le programmeur doit connaître le concept de conception.


13
Êtes-vous sûr que cette question n'est pas constructive?
Mohammed Azharuddin Shaikh

6
Je pense que c'est très constructif. J'aimerais connaître les raisons des votes négatifs.
Lazy Ninja

11
@MKJParekh take MicroMax Funbook gsmarena.com/micromax_funbook_p300-4701.php 7", 480X800, Ldpi (133 dpi) pouvez-vous me dire dans quelle catégorie (drawble-large ou Ldpi ou si Android v3.0 sw-480) il tombera?
Mohammed Azharuddin Shaikh

1
@LazyNinja la raison des votes négatifs est les fous et les fous. Qui pensent simplement qu'ils ne peuvent poser que des questions constructives: p
AZ_

1
@AZ_ :) Nous avons utilisé cette structure res dans le dossier res drawable drawable-hdpi drawable-hdpi-v11 drawable-hdpi-v9 drawable-large drawable-large-hdpi drawable-ldpi drawable-mdpi drawable-mdpi-v11 drawable-small drawable- xhdpi drawable-xhdpi-v11 drawable-xxhdpi drawable-xxhdpi-v11 layout layout-small layout-sw530dp layout-sw720dp layout-xlarge values ​​values-sw530dp values-sw720dp values-v14 values-xlarge et a utilisé des dimensions bien définies dans xml à partir du dossier de valeurs . FYKI notre application prend en charge plus de 5k types d'appareils.
MKJParekh

Réponses:


147

Enfin créé une structure qui gère les mises en page et l'icône pour plusieurs écrans.

Android généralise les affichages des appareils en catégories en fonction de deux paramètres:

  • Taille de l'écran, la taille physique de l'écran (mesurée en diagonale)
  • Densité de l'écran, densité de pixels physiques de l'écran (en pixels par pouce ou ppp) `

Pour déterminer rapidement la taille et la densité de l'écran, veuillez installer l'application " Quelle est ma taille " pour Android.

Taille de l'écran

Android définit quatre tailles d'écran généralisées:


 Qualifier           Size

 small               ~3 inches (approx) 
 normal              ~4 inches (approx) 
 large               Exceeds 4 inches    
 xlarge              Exceeds 7 inches  
  • La plupart des téléphones sont classés comme petits ou normaux (environ 3 à 4 pouces de diagonale). Mais maintenant, il existe de nombreux téléphones avec grand écran comme le Galaxy S4, le HTC One, le Xperia Z
  • Une petite tablette comme la Samsung Galaxy Tab est classée comme grande (plus de 4 pouces)
  • Extra-large s'applique aux gros appareils, par exemple les grandes tablettes

Android définit quatre densités d'écran généralisées:


 Qualifier         Description         Nominal value

 ldpi              low density          120 ppi
 mdpi              medium density       160 ppi
 hdpi              high density         240 ppi
 xhdpi             extra high density   320 ppi

Typiquement:

  • la taille de l'écran a le plus d'impact sur la mise en page de votre application
  • la densité de l'écran a le plus d'impact sur votre image et vos ressources graphiques

Il est répertorié ici la différence de pourcentage de l'écran de l'appareil

  • Ldpi- 75%
  • Mdpi- 100% (base selon le site développeur Android)
  • Hdpi- 150%
  • XHdpi- 200%

entrez la description de l'image ici

Mais comme nous le savons maintenant, la plupart des appareils livrés avec 480X800 , je considère donc cela comme un appareil basé, donc notre nouveau calcul aimera ceci

  • Ldpi- 50%
  • Mdpi- 66,67%
  • Hdpi- 100%
  • XHdpi- 133,33%

ce qui signifie que la première icône et le design seront créés pour 480X800 uniquement et ensuite pour les autres (c'est-à-dire Ldpi, Mdpi, Xhdpi).

Il y a des images qui sont communes à toutes les 9patchmises en page et doivent être uniformes en couleur et en forme (pas de forme complexe, pas de courbe), donc pour ce type d'image, nous créons qui doit être placée dans un dossier «dessinable (sans suffixe)». Pour créer une image 9Patch, vous pouvez utiliser DrawNinePatch ou BetterNinePatch

Maintenant, renommez simplement vos images en fonction des normes d'Android et complétez votre application avec hdpi, puis prenez simplement un drawable-hdpidossier et ouvrez Adode Photoshop (recommandé) créez une action de plusieurs tailles (changez simplement la taille en fonction du pourcentage) une fois l'action créée pour toutes les tailles, faites simplement Batch Automatisez et donnez la source (drawable-hdpi) et la destination (drawable-ldpi, drawable-mdpi, drawable-xdpi).

La raison pour laquelle j'insiste pour que vous utilisiez Photoshop car il redimensionnera automatiquement votre image avec des actions et un autre point positif est que vous n'avez pas besoin de renommer le fichier (il attribuera le même nom que l'original).

une fois que vous avez terminé la création de toutes les images, actualisez votre projet et testez-le.

Parfois, il peut être possible que la mise en page qui prend en charge l'écran (xhdpi, hdpi, mdpi) soit coupée en petit écran (ldpi), donc pour gérer cela, créez simplement un dossier de mise en page séparé (layout-small) et ajoutez ScrollView(principalement). C'est tout.

Les comprimés sont classés en deux tailles.

  1. 7 "(1024X (600-48 (barre de navigation))) = 1024X552 (dessinable-large)
  2. 10 "(1280X (800-48 (barre de navigation))) = 1280X752 (drawable-xlarge)

En cela, nous devons créer une image à la fois pour l'écran et les mettre en conséquence

Donc, dans l'ensemble, nous aurons ce dossier dans notre application pour prendre en charge plusieurs écrans.

drawable
drawable-ldpi
drawable-mdpi
drawable-hdpi
drawable-xhdpi
drawable-large
drawable-xlarge

sera une combinaison plus qualificative avec Screen size and Screen density

drawable-large-ldpi
drawable-large-mdpi
drawable-large-hdpi
drawable-large-xhdpi

plus de qualificatif avec Screen density and Version

drawable-ldpi-v11
drawable-mdpi-v11
drawable-hdpi-v11
drawable-xhdpi-v11

et plus de qualificatif avec Screen size and Version

drawable-large-v11
drawable-xlarge-v11

et plus de qualificatif avec Smallest width concept(SW)

 drawable-sw???dp

De plus, dans Android V3.0 Honeycomb, ils ont introduit un nouveau concept SW(smallest width)selon lequel les appareils sont classés en largeur d'écran, donc si nous créons un dossier nommé, drawable-sw360dpl'appareil avec 720dp (largeur ou hauteur) utilisera les ressources de ce dossier.

par exemple pour trouver le Samsung Galaxy S3 dp au suffixe à drawable-sw? dp
En référence au calcul DP , si vous voulez prendre en charge votre mise en page ou dessiner vers S3, le calcul dit

px = largeur de l'appareil = 720
dpi = densité de l'appareil = 320

formule donnée

    px = dp * (dpi / 160)

formule interchangeable parce que nous avons la valeur de px

    dp = px / (dpi / 160)

mettre maintenant de la valeur,

     dp= 720 / (320/160);
     dp=360. 

alors drawable-sw360dpfera le travail

Obtenez la configuration de votre appareil depuis GsmArena Sameway, vous pouvez également créer un dossier en fonction de la version de l'API Android de l'appareil, c'est-à-dire drawable-hdpi-v11`, de sorte que l'appareil qui a API11 et qu'il est Hdpi, il utilisera ces ressources.

Conseils supplémentaires:

  • Utiliser des dispositions relatives, dp, sp et mm

    Unités dp - pixels indépendants de l'appareil normalisés à 1 pixel physique sur un écran de 160 ppp, soit une densité moyenne. Mise à l'échelle au moment de l'exécution. Utiliser pour les dimensions des éléments d'écran

    unités sp - pixels mis à l'échelle, spécifiés sous forme de valeurs à virgule flottante, basés sur les unités dp, mais également mis à l'échelle pour le paramètre de préférence de taille de police de l'utilisateur. Mise à l'échelle au moment de l'exécution. Utiliser pour les tailles de police

    vous devez toujours utiliser RelativeLayout pour les mises en page; AbsoluteLayout est obsolète et ne doit pas être utilisé.

  • Utilisez les formats d'image appropriés - PNG ou JPEG

    Android "prefers" PNG for bitmap image files, "accepts" JPEG, and "discourages" GIF.

    Cependant, PNG et JPEG ne sont pas des équivalents. Ils ont des compromis de qualité différents, et la PNG n'est pas toujours la meilleure:

    JPEG peut offrir jusqu'à 50% de réduction de la taille des fichiers par rapport au PNG, ce qui est important si votre application est gourmande en images

    Un fichier JPEG «avec perte» de meilleure qualité peut sembler meilleur qu'un PNG «sans perte» hautement compressé, pour la même taille de fichier

  • Ajoutez des étiquettes à vos images et graphiques pour le débogage

  • Utilisez l'élément supports-screens

  • Configurez vos émulateurs avec des valeurs d'appareil réelles

    De manière classique, les systèmes de bureau affichent à 72 ppp (Mac) ou 96 ppp (Windows, Linux). Par rapport aux mobiles, les écrans de bureau sont toujours de faible densité.

    Configurez toujours vos émulateurs Android pour imiter les valeurs réelles des appareils et définissez-les toujours pour qu'ils soient mis à l'échelle pour émuler la densité des appareils.

    Dans Eclipse, il est facile de créer plusieurs émulateurs (dans la barre de menus Eclipse, sélectionnez Fenêtre> AVD Manager> Nouveau ) configurés avec des valeurs pour de vrais appareils:

    Nommez l'émulateur du périphérique réel qu'il émule Spécifiez la résolution, n'utilisez pas les tailles génériques intégrées Définissez la densité du périphérique pour qu'elle corresponde au périphérique réel (dans le volet Matériel, définissez la propriété LCD abstraite sur la densité réelle, toujours une valeur entière)

    Lorsque vous lancez l'appareil, sélectionnez toujours Mettre à l'échelle l'affichage à la taille réelle et saisissez la dimension réelle de l'écran en pouces.

    Si vous ne définissez pas la densité du périphérique, l'émulateur utilise par défaut une densité faible et charge toujours les ressources spécifiques à ldpi. La résolution (dimensions en pixels) sera correcte, mais vos ressources d'image dépendant de la densité ne s'afficheront pas comme prévu.

    Bien entendu, rien de ce que vous faites ne reproduira une qualité d'image de densité plus élevée sur un écran de bureau de densité inférieure.

Voici les données collectées pendant une période de 7 jours se terminant le 1er octobre 2012. Pour voir les dernières statistiques sur la version de la plate-forme Android, cliquez ici

Basé sur la taille de l'écran

entrez la description de l'image ici

Basé sur la densité de l'écran

entrez la description de l'image ici


2
Pour Samsung Galaxy Tab 7 ", nous devons conserver les images sous drawable-large-hdpi, sinon l'image sera étirée ou rétrécie.
rajpara

@rajpara il y a beaucoup de combinaisons et de permutations, nous inclurons tous ces cas plus tard.
Mohammed Azharuddin Shaikh le

1
voir @AlexBonel, oui je suis d'accord avec vous, mais ma devise principale est de faire comprendre comment les choses peuvent être faites en ce qui concerne le support multi-écrans. On peut modifier / manipuler ce flux / concept car ce qui précède sert à clarifier le problème initial. De plus, je fais aussi des modifications basées sur la conception de l'application. Votre message me donne le sentiment que vous avez compris le concept. J'espère que vous avez compris mon point.
Mohammed Azharuddin Shaikh

1
Bonne réponse. Après avoir beaucoup cherché et tant de jours pourquoi ces exceptions se produisent, j'ai reçu ce message comme meilleure réponse avec un excellent exemple et une explication. Par exemple, considérez la tablette Halo Value 7 pouces. PPI = 133. Résolution = 480 * 800. Taille = 7 'pouces. Si nous considérons mdpi comme base, il doit prendre la dimension définie dans values-sw480 mais il prend la dimension de values-sw600. Je ne comprends pas pourquoi cela se produit. Vraiment merci beaucoup pour votre message. Gagnez du temps et éliminez la confusion. Je pense que cela devrait être sur le site officiel d'Android. Appréciez vos efforts.
Smeet

1
Je pense que c'est la meilleure réponse que j'aie jamais vue. Je recherche une telle réponse depuis longtemps. Et finalement je l'ai eu. Merci à tous d'avoir contribué pour cette réponse afin de la rendre plus compréhensible.
Hiren Dixit

1

Les concepteurs doivent créer des conceptions de base

base size of mdpi devices * density conversion factor of highest supported density bucket
La taille de l'écran de base est de 320 X 480 px et les compartiments de densité sont les suivants:

  • ldpi: 0,75
  • mdpi: 1.0 (densité de base)
  • hdpi: 1,5
  • xhdpi: 2.0
  • xxhdpi: 3,0
  • xxxhdpi: 4.0

Et pour gérer l'espace disponible supplémentaire sur les appareils Android, vous devez utiliser des composants extensibles dans les deux sens (horizontalement et verticalement). Des informations détaillées sont disponibles ici:

http://vinsol.com/blog/2014/11/20/tips-for-designers-from-a-developer/

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.