web-dev-qa-db-fra.com

Comment supporter différentes tailles d'écran sous Android

Je développe une application sous Android et je dois prendre en charge toutes les tailles et densités d'écran. J'ai donc créé un dossier différent pour la mise en page: layout-small layout-large et layout

Ensuite, j'ai créé un dossier différent pour l'image: ldpi, mdpi et hdpi. Dans tous les dossiers pouvant être dessinés, l’image doit être de taille différente, vrai? Je demande à cette cause si j'ai un téléphone avec une taille d'écran grande et une densité moyenne, l'image affichée sera plus petite et ne prendra pas la bonne taille?

42
JackTurky

Vous trouverez ci-dessous une liste des répertoires de ressources d’une application proposant différentes conceptions pour différentes tailles d’écran et différentes images bitmap pour les écrans de petite, moyenne, grande et très haute densité.

res/layout/my_layout.xml             // layout for normal screen size ("default")
res/layout-small/my_layout.xml       // layout for small screen size
res/layout-large/my_layout.xml       // layout for large screen size
res/layout-xlarge/my_layout.xml      // layout for extra large screen size
res/layout-xlarge-land/my_layout.xml // layout for extra large in landscape orientation

res/drawable-mdpi/my_icon.png        // bitmap for medium density
res/drawable-hdpi/my_icon.png        // bitmap for high density
res/drawable-xhdpi/my_icon.png       // bitmap for extra high density

Le code suivant dans le manifeste prend en charge tous les dpis.

<supports-screens Android:smallScreens="true" 
          Android:normalScreens="true" 
          Android:largeScreens="true"
          Android:xlargeScreens="true"
          Android:anyDensity="true" />

Et vérifiez aussi ma SO réponse .

69
Uttam

Vous pouvez utiliser sdp unité de taille au lieu de unité de taille dp. L'unité sdp size est relative à la taille de l'écran et est donc souvent préférable pour cibler plusieurs tailles d'écran.

Utilisez-le avec précaution! Par exemple, dans la plupart des cas, vous devez encore concevoir une présentation différente pour les tablettes.

8
Elhanan Mishraky

À partir de Android 3.2 (API niveau 13), les groupes de tailles (dossiers petits, normaux, grands, xlarge) sont déconseillés au profit d'une nouvelle technique de gestion des tailles d'écran en fonction de la largeur d'écran disponible.



Il existe différentes configurations de ressources que vous pouvez spécifier en fonction de l'espace disponible pour votre modèle:

1) La plus petite largeur - La taille fondamentale d'un écran, indiquée par la plus petite dimension de la zone d'écran disponible.

Valeur du qualificatif: sw'dp value'dp

Par exemple. res/sw600dp/layout.xml -> sera utilisé pour toutes les tailles d'écran supérieures ou égales à 600dp. Cela ne prend pas en compte l'orientation de l'appareil .


2) Largeur d'écran disponible - Spécifie une largeur disponible minimale en unités dp à laquelle les ressources doivent être utilisées.

Valeur du qualificatif: w'dp value'dp

Par exemple. res/w600dp/layout.xml -> sera utilisé pour tous les écrans, dont la largeur est supérieure ou égale à 600dp .


3) Hauteur de l'écran disponible - Spécifie une hauteur d'écran minimale en unités dp à laquelle les ressources doivent être utilisées.

Valeur du qualificatif: h'dp value'dp

Par exemple. res/h600dp/layout.xml -> sera utilisé pour tous les écrans, dont la hauteur est supérieure ou égale à 600dp .



Ainsi, à la fin, la structure de votre dossier pourrait ressembler à ceci:

res/layout/layout.xml -> pour les combinés (largeur disponible inférieure à 600dp)
res/layout-sw600dp/layout.xml -> pour les tablettes 7 ”(600dp de large et plus grand)
res/layout-sw720dp/layout.xml -> pour les tablettes 10 ”(720dp de large et plus grand)


Pour plus d'informations, veuillez lire la documentation officielle:
https://developer.Android.com/guide/practices/screens_support.html#DeclaringTabletLayouts

6
Schwesi

Si vous souhaitez utiliser différentes images pour les appareils haute résolution et les autres appareils, vous pouvez définir une image distincte pour chaque dossier. Sinon, placez un dossier de disposition dessiné uniquement pour certaines images que vous pouvez également créer en 9 patchs.

lire ici

vous avez besoin d'une autorisation dans le manifeste pour plusieurs écrans lien de support

<supports-screens Android:resizeable=["true"| "false"]
                  Android:smallScreens=["true" | "false"]
                  Android:normalScreens=["true" | "false"]
                  Android:largeScreens=["true" | "false"]
                  Android:xlargeScreens=["true" | "false"]
                  Android:anyDensity=["true" | "false"]
                  Android:requiresSmallestWidthDp="integer"
                  Android:compatibleWidthLimitDp="integer"
                  Android:largestWidthLimitDp="integer"/>
3
ud_an

Cela semble noble quand il s’agit de prendre en charge plusieurs tailles d’écran. Les résultats suivants donnent de meilleurs résultats.

res/layout/layout-w120dp
res/layout/layout-w160dp
res/layout/layout-w240dp
res/layout/layout-w160dp
res/layout/layout-w320dp
res/layout/layout-w480dp
res/layout/layout-w600dp
res/layout/layout-w720dp

Contrôlez la largeur et la hauteur du périphérique à l'aide de métriques d'affichage

Placez/déterminez quelle disposition correspond à la largeur résultante de l'appareil.

let smallestScreenWidthDp="assume some value(Which will be derived from Display metrics)"

Tout doit être vérifié avant setContentView (), sinon vous vous posez des problèmes 

     Configuration config = getResources().getConfiguration();

     Configuration config = getResources().getConfiguration();

        if (config.smallestScreenWidthDp >= 600) {
            setContentView(R.layout.layout-w600dp);
        } else {
            setContentView(R.layout.main_activity);
        }

En haut, j'ai créé tellement de mises en page pour s'adapter à plusieurs écrans, tout dépend de vous, que vous le souhaitiez ou non. .

J'espère que cela vous aidera beaucoup. Peu utilisaient des bibliothèques tierces. Cela réduira peut-être votre travail, mais ce n'est pas la meilleure pratique. Habituez-vous aux meilleures pratiques Android.

Regarde ça

3
Trinadh Koya

Vous pouvez déterminer les dimensions de l'écran de manière dynamique

Display mDisplay= activity.getWindowManager().getDefaultDisplay();
int width= mDisplay.getWidth();
int Height= mDisplay.getHeight();

La mise en page peut être définie à l'aide de la largeur et de la hauteur obtenues à l'aide de cette méthode.

2
Sathish

utiliser la bibliothèque sdp fournie dans github

1
DEEP ADHIYA

vous pouvez créer des bitmaps pour la résolution/taille maximale de votre application et les redimensionner dans le code (au moment de l'exécution)

consultez cet article http://nuvornapps-en.blogspot.com.es/

0
Nuvorn Apps

Ajout à @ud_an

Ce n'est pas une bonne pratique de créer des dossiers différents pour les mises en page. Créez votre mise en page de sorte que cela fonctionne bien avec toutes les tailles d'écran. Pour ce faire, jouez avec les attributs de disposition . Il vous suffit d’avoir différentes images pour les types hdpi, mdpi et ldpi. Le reste sera géré par Android OS.

0
Shafi