Je développe un programme sur Android version2.2. J'ai lu de nombreux documents sur la prise en charge de plusieurs tailles d'écran mais toujours confus. J'ai conçu un fichier de mise en page, qui prend en charge les grands écrans et les écrans normaux. Lorsque je l'essaie avec un petit écran, il ne modifie pas la mise en page pour l'adapter à l'écran. J'ai aussi utilisé ce code dans le manifeste.
<supports-screens
Android:resizeable="true"
Android:smallScreens="true"
Android:normalScreens="true"
Android:largeScreens="true"
Android:anyDensity="true"
/>
L'image pour le petit écran est ici. Comment configurer un écran compatible avec le petit écran? J'ai trouvé quelque part quelque part en utilisant le dossier "layout-small", mais si j'utilise ceci, la taille du projet augmente, je ne le souhaite pas. Quelqu'un peut-il me suggérer le meilleur moyen de procéder?
Veuillez passer par les liens suivants. Ceux-ci pourraient vous aider:
Prise en charge de différentes tailles d'écran
Prise en charge de plusieurs écrans
Soutenir des densités différentes
Tablettes et combinés compatibles
Autant que je sache, la seule façon de prendre en charge tous les écrans consiste à bifurcer ce dossier. Chaque fichier XML peut aller jusqu'à quelques kilo octets. La taille ne devrait donc pas être un problème en tant que tel.
Solution pour tous les écrans et supporte tous les layout.
ldpi mdpi hdpi xhdpi xxhdpi xxxhdpi
ic_launcher 36x36 48x48 72x72 96x96 144x144 192x192
Notification 18x18 24x24 36x36 48x48 72x72 96x96
Action Bar & Tab 24*24 32*32 48*48 64*64 96*96 128*128
Background 240x320 320x480 480x800 720x1280 1080x1920 1440X2560
Dossier dessinable:
res/drawable (default)
res/drawable-ldpi/ (240x320 and nearer resolution)
res/drawable-mdpi/ (320x480 and nearer resolution)
res/drawable-hdpi/ (480x800, 540x960 and nearer resolution)
res/drawable-xhdpi/ (720x1280 - Samsung S3, Micromax Canvas HD etc)
res/drawable-xxhdpi/ (1080x1920 - Samsung S4, HTC one, Nexus 5, etc)
res/drawable-xxxhdpi/ (1440X2560 - Nexus 6,Samsung S6Edge).
ldpi (low) ~120dpi
mdpi (medium) ~160dpi
hdpi (high) ~240dpi
xhdpi (extra-high) ~320dpi
xxhdpi (extra-extra-high) ~480dpi
xxxhdpi (extra-extra-extra-high) ~640dpi
Disposition:
layout-large-mdpi (1024x600)
layout-large-tvdpi (800x1280)
layout-large-xhdpi (1200x1920)
layout-xlarge-mdpi (1280x800)
layout-xlarge-xhdpi (2560x1600)
res/layout/activity_main.xml # For handsets (smaller than 600dp available width)
res/layout-sw600dp/activity_main.xml # For 7 inches tablets (600dp wide and bigger)
res/layout-sw720dp/activity_main.xml # For 10 inches tablets (720dp wide and bigger)
OR
res/layout/layout #this is the default
res/layout/layout-large #for 7 inches tablet and images from res/drawable-mdpi/xyz.png
res/layout/layout-xlarge #for 10 inches tablet
Référencez des liens:
Support de résolution différent Android
https://developer.Android.com/guide/practices/screens_support.html
https://design.google.com/devices/
http://www.emirweb.com/ScreenDeviceStatistics.php
Tailles d'écran/résolutions les plus populaires sur les téléphones Android
Oui, j'ai le cure à votre problème, vous avez raison. Personnellement, je pense que faire des mises en page pour chaque résolution d'écran prend du temps et que la taille de votre projet augmente.
Pour faire une mise en page qui s'adapte à toutes les résolutions d'écran, j'ai implémenté ma propre technique, à savoir régler width et height en termes de pourcentage
Le problème se produit lorsque nous définissons Views/Layouts
avec une valeur constante de width ou height, disons 100dp
.
Solution est assez simple, essayez d'utiliser match_parent
pour que la vue remplisse les espaces vides ou utilisez weight
et définissez chaque View
par rapport à un autre Views
, cela aidera votre présentation à bien paraître dans presque toutes les résolutions d'écran et à l'exécution LayoutParams
de seulement Views/Layouts
qui a une constante width ou height en termes de Percentage.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent" >
<LinearLayout
Android:id="@+id/mLayout"
Android:layout_width="280px"
Android:layout_height="300px" />
</RelativeLayout>
Remarque: J'ai utilisé px pour la mise en page de taille fixe width/height car dans LayoutParams layoutParams = new LayoutParams(int width, int height);
la width
et la height
prennent la valeur pixels.
Voici un exemple de code
final ViewTreeObserver mLayoutObserver = mLayout.getViewTreeObserver();
mLayoutObserver.addOnGlobalLayoutListener(new OnGlobalLayoutListener()
{
@Override
public void onGlobalLayout()
{
DisplayMetrics metrics = getResources().getDisplayMetrics();
int deviceWidth = metrics.widthPixels;
int deviceHeight = metrics.heightPixels;
float widthInPercentage = ( (float) 280 / 320 ) * 100; // 280 is the width of my LinearLayout and 320 is device screen width as i know my current device resolution are 320 x 480 so i'm calculating how much space (in percentage my layout is covering so that it should cover same area (in percentage) on any other device having different resolution
float heightInPercentage = ( (float) 300 / 480 ) * 100; // same procedure 300 is the height of the LinearLayout and i'm converting it into percentage
int mLayoutWidth = (int) ( (widthInPercentage * deviceWidth) / 100 );
int mLayoutHeight = (int) ( (heightInPercentage * deviceHeight) / 100 );
LayoutParams layoutParams = new LayoutParams(mLayoutWidth, mLayoutHeight);
mLayout.setLayoutParams(layoutParams);
}
});
Je suppose que le code est assez explicite si quelqu'un a encore besoin d'aide, vous pouvez le demander immédiatement
Conclusion: Si vous devez définir une constante width/height pour votre Views/Layouts
, définissez toujours la valeur dans px dans le fichier de présentation (i.e xml), puis définissez par programme LayoutParams
.
Suggestion: Je pense que Google Android Guys devrait sérieusement songer à remplacer les unités dp/dip
par percentage
.
Maintenant, prendre en charge différentes tailles d'écran est plus facile! Utilisez la nouvelle unité de taille SDP.
SDP - une unité de taille évolutive
Un SDK Android qui fournit une nouvelle unité de taille - sdp (dp évolutif). Cette unité de taille est adaptée à la taille de l'écran. Il peut aider les développeurs Android à prendre en charge plusieurs écrans.
pour les vues de texte, veuillez vous référer à ssp qui est basé sur l'unité de taille sp des textes.
Le DP évolutif (SDP) est la meilleure solution à utiliser. Cela redimensionnera les widgets en fonction de la taille de l'écran. Nous pouvons également l'appliquer à du texte pour différentes tailles de texte.
Pour ajouter un sdp à votre projet (à l'aide d'Android Studio et de Gradle):
ajoutez l'implémentation ' com.intuit.sdp: sdp-Android: 1.0.5 ' à votre bloc de dépendances build.gradle.
for example:
dependencies {'com.intuit.sdp:sdp-Android:1.0.5' }