web-dev-qa-db-fra.com

Comment inclure correctement des mises en page de 10 "et 7"

Nexus 7: 7 "1280x800

Onglet Galaxy 10.1 10 "1280x800

Je souhaite que mon application fonctionne sur des tablettes de 7 et 10 pouces. Pour autant que je sache, je dois inclure ces dossiers de disposition dans mon application:

pour tablettes 7 pouces

  • layout-sw600dp
  • layout-sw600dp-port

pour tablettes 10 pouces

  • layout-sw720dp
  • layout-sw720dp-port

Il fonctionne bien sur le nexus 7, mais charge les dispositions sw600dp sur la tablette 10 ".

Si j'inclus ces dossiers par défaut:

  • disposition
  • port de mise en page

Un onglet galaxie de 10 "charge les dispositions de ceux-ci.

Si je n'inclus que les dossiers de mise en page par défaut et le sw600dp, il se bloque sur le nexus7.

Comment suis-je censé prendre en charge les téléphones, les tablettes 7 "et les tablettes 10", si l'onglet Galaxy 10 "ne charge pas les dispositions du sw720p?

modifier: mise en forme

40
berestom

Le problème était que je n'avais pas de dossier de mise en page par défaut.

J'ai essayé de m'en sortir, en utilisant uniquement les dossiers sw600dp et sw720dp. Je ne sais toujours pas pourquoi ils ne fonctionnent pas, mais je m'en fiche. Je ne peux pas utiliser swxxxdp <3.2 de toute façon, alors vissez-le.

Donc, si vous voulez écrire une application, qui doit prendre en charge les téléphones (2.2+), les tablettes 7 pouces et les tablettes 10 pouces, utilisez les trucs oldschool suivants:

disposition c'est la valeur par défaut, elle est nécessaire même si vous ne prévoyez pas de prendre en charge les téléphones!

layout-large pour tablette 7 "(fonctionne sur émulateur et nexus7)

layout-xlarge pour tablette 10 "(fonctionne sur émulateur et galaxytab10.1)

D'autres personnes sont également arrivés à la même conclusion.

58
berestom

Je suis également confronté à un tel problème dans ma demande. Mais j'ai trouvé une bonne solution pour cela. Je n'ai qu'une seule disposition pour tablet et le nom du répertoire est layout-sw600dp. Maintenant, lorsque la pièce a rencontré des problèmes de hauteur et de largeur, j'ai créé plusieurs répertoires values différents dans lesquels je place dimensions et font size et autres talons. Il n'y aura donc pas de valeur constant dans layout de l'écran de la tablette.

androd:layout_width:"60dp" // i drop this scenario

androd:layout_width:"@dimen/tab_width" // i used this scenario

et votre nom de répertoire values sera comme

values-xlarge
values-large

Toutes les valeurs seront extraites de votre répertoire de valeurs. Il ne créera pas de disposition différente, mais une disposition peut être utilisée plusieurs fois.

Voici les mots de Developer.Android site. Exemples de configuration

Pour vous aider à cibler certaines de vos conceptions pour différents types d'appareils, voici quelques chiffres pour des largeurs d'écran typiques:

320dp: a typical phone screen (240x320 ldpi, 320x480 mdpi, 480x800 hdpi, etc).
480dp: a tweener tablet like the Streak (480x800 mdpi).
600dp: a 7” tablet (600x1024 mdpi).
720dp: a 10” tablet (720x1280 mdpi, 800x1280 mdpi, etc).

En utilisant les qualificatifs de taille du tableau 2, votre application peut basculer entre vos différentes ressources de disposition pour les combinés et les tablettes en utilisant n'importe quel nombre que vous souhaitez pour la largeur et/ou la hauteur. Par exemple, si 600dp est la plus petite largeur disponible prise en charge par la disposition de votre tablette, vous pouvez fournir ces deux ensembles de dispositions:

res/layout/main_activity.xml # Pour les combinés
res/layout-sw600dp/main_activity.xml # Pour les tablettes

===

En cela, vous pouvez voir que la disposition pour 1280 * 720 est sous layout-sw720dp donc au lieu de créer layout-normal-xlarge vous devriez utiliser cette chose qui vous permet de décider des différences. Au lieu de vous identifier différemment à l'aide de layout-large-mdpi et layout-large-ldpi, n'êtes-vous pas simplement identifié par son smallest width? Parce que, Android fournissant le répertoire drawables pour différentes images, la seule chose est sa résolution. Et vous avez la solution ci-dessus.

Modifier

Ensuite, vous devez développer différentes dispositions. Aucune autre option. J'ai trouvé à http://jamil.fluidsoul.net/2011/03/06/creating-Android-applications-for-multiple-screen-sizes .

Low density Small screens QVGA 240x320 (120dpi):

layout-small-ldpi (240x320)  
layout-small-land-ldpi (320x240)

Low density Normal screens WVGA400 240x400 (x432) (120dpi):

layout-ldpi  (240 x 400 )
layout-land-ldpi  (400 x 240 )

Medium density Normal screens HVGA 320x480 (160dpi):

layout-mdpi (320 x 480 )
layout-land-mdpi (480 x 320 )

Medium density Large screens HVGA 320x480 (160dpi):

layout-large-mdpi (320 x 480 )
layout-large-land-mdpi (480 x 320)

Galaxy Tab ( 240 dpi ):

layout-large  (600 x 1024) 
layout-large-land  (1024 x 600)

High density Normal screens WVGA800 480x800 (x854) (240 dpi):

layout-hdpi (480 x 800)
layout-land-hdpi (800 x 480)

Xoom (medium density large but 1280x800 res) (160 dpi):

layout-xlarge (800 x 1280)
layout-xlarge-land (1280 x 800)
21
Chintan Rathod

Oui, vous devez utiliser des dossiers dépendant de la mise en page, mais assurez-vous également que toutes les mises en page indépendantes de l'appareil vont dans votre dossier res/layout.

Ceci est mentionné sur le site de développeur Android Android mais pour réitérer leur point de vue, si vous avez une mise en page qui n'est disponible que dans un dossier layout-xlarge sur une application qui prend en charge par exemple des appareils de grande taille et de taille normale comme eh bien, l'application se bloquera car les petits appareils ne pourront pas trouver de correspondance pour cette ressource.

Voici une bonne structure de dossiers, commencez par:

res/layout

Conservez une disposition indépendante de l'appareil, vous pouvez éviter cela si vous tenez compte de tous les types de qualificatifs possibles, mais c'est toujours l'option la plus sûre.

Si vous souhaitez ajouter des dispositions spécifiques pour, disons, des tablettes de 7 et 10 pouces, utilisez toutes les options suivantes:

res/layout-large
res/layout-xlarge
res/layout-sw600dp
res/layout-sw720dp
res/layout-sw800dp

Et ainsi de suite pour toute largeur d'écran de périphérique spécifique que vous souhaitez prendre en charge. Il convient de noter que le sw600 prend en charge la plus petite largeur possible, évite donc l'utilisation de la largeur de l'écran lorsque l'appareil est tenu en mode paysage. L'utilisation des qualificatifs swxxxdp est préférable, mais ceux-ci ont été ajoutés dans l'API 13, vous aurez donc toujours besoin de grands, xlarge pour les anciens Android OS.

En ce qui concerne l'utilisation du dpi, sachez que si vous définissez UNIQUEMENT un qualificatif de densité pour une taille, donc layout-large-mdpi par exemple, alors tous les périphériques qui correspondent au grand qualificatif utiliseront des dispositions d'ici au lieu d'un autre dossier, cela est dû aux critères de meilleure correspondance, que vous pouvez lire sur ici . Il correspondra à un grand appareil avant de correspondre à la densité, de sorte que les écrans de densité non mdpi utiliseront toujours ces dispositions.

Pour contrer cela, vous devrez également inclure des dossiers pour toutes les autres densités que vous prenez en charge, donc layout-large-hdpi à la suite de l'exemple ci-dessus, et incluez dans ce dossier les versions hdpi des présentations que vous avez utilisées dans le dossier mdpi si vous souhaitez qu'elles soient différentes.

Évitez également de dupliquer vos mises en page, bien sûr, ne copiez pas les mises en page indépendantes de l'appareil dans chaque dossier inutilisé si vous n'en avez besoin que dans res/layout, essayez de ne conserver que les présentations qui nécessitent ces qualificatifs dans les dossiers et organisez-les correctement, en vous assurant que vos dossiers sont nommés avec les qualificatifs dans le bon ordre de priorité pour éviter d'utiliser le mauvais dossier pour une combinaison densité/taille.

2
sturrockad

C'est très étrange, car vous faites la bonne chose.

Le qualificatif sw600dp doit être sélectionné par le Nexus 7.
S'il est disponible, le qualificatif sw720dp doit être sélectionné par la Galaxy Tab.

Êtes-vous sûr qu'il se bloque lorsque vous essayez de trouver une mise en page appropriée? Android peut trouver la mise en page correcte, mais quelque chose dans le fichier xml de mise en page peut être manquant et le plantage est causé par cela.

1
Streets Of Boston