Lors de la prise en charge de différentes tailles (densités) d'écran dans Android , l'accent est souvent mis sur la création de dispositions différentes pour chaque écran possible. C'EST À DIRE.
J'ai conçu une mise en page pour un écran xhdpi , et défini ses dimensions dans dimens.xml. Maintenant je veux donner un support à chaque taille d'écran possible. Comment puis-je faire cela?
Pour autant que je sache, je peux utiliser l'outil this pour déterminer le bon dimens.xml pour d’autres tailles d’écran et l’ajouter à mon projet. Est-ce la bonne façon de le faire dans ma situation?
Une autre question, , dois-je seulement créer dimens.xml pour les dimensions d'écran supérieures? Si oui, alors qu'est-ce que w820dp
?
Merci de votre aide. Je dois prendre en charge uniquement les téléphones (pas les tablettes ou autres appareils).
Vous devez créer un dossier de valeurs différentes pour différents écrans . Comme
values-sw720dp 10.1” tablet 1280x800 mdpi
values-sw600dp 7.0” tablet 1024x600 mdpi
values-sw480dp 5.4” 480x854 mdpi
values-sw480dp 5.1” 480x800 mdpi
values-xxhdpi 5.5" 1080x1920 xxhdpi
values-xxxhdpi 5.5" 1440x2560 xxxhdpi
values-xhdpi 4.7” 1280x720 xhdpi
values-xhdpi 4.65” 720x1280 xhdpi
values-hdpi 4.0” 480x800 hdpi
values-hdpi 3.7” 480x854 hdpi
values-mdpi 3.2” 320x480 mdpi
values-ldpi 3.4” 240x432 ldpi
values-ldpi 3.3” 240x400 ldpi
values-ldpi 2.7” 240x320 ldpi
Pour plus d'informations, vous pouvez visiter ici
Différents dossiers de valeurs sous Android
http://Android-developers.blogspot.in/2011/07/new-tools-for-managing-screen-sizes.html
Edité par @ humblerookie
Vous pouvez utiliser le plug-in Android Studio appelé Dimenify pour générer automatiquement des valeurs de cote pour d'autres compartiments de pixels en fonction de facteurs d'échelle personnalisés. Il est toujours en version bêta, assurez-vous de signaler tout problème/suggestion que vous rencontrez au développeur.
Bien que théoriquement, il soit judicieux de disposer d'une disposition différente pour des tailles d'écran différentes, il peut s'avérer très difficile de prendre en compte toutes les dimensions et les densités de pixels (- === -). Avoir plus de 20 fichiers dimens.xml
différents, comme suggéré dans les réponses ci-dessus, n'est pas facile à gérer du tout.
Comment utiliser:
Pour utiliser sdp
:
implementation 'com.intuit.sdp:sdp-Android:1.0.5'
dans votre build.gradle
,Remplacez toute valeur dp
telle que 50dp
par un @dimen/50_sdp
comme ceci:
<TextView
Android:layout_width="@dimen/_50sdp"
Android:layout_height="@dimen/_50sdp"
Android:text="Hello World!" />
Comment ça marche:
sdp
s'adapte à la taille de l'écran car il s'agit essentiellement d'une liste énorme de différents dimens.xml
pour chaque valeur possible dp
.
Voyez-le en action:
La voici sur trois appareils avec des dimensions d'écran et des densités très différentes:
Notez que le calcul de l'unité de taille sdp
inclut une approximation due à des contraintes de performances et de convivialité.
nous voulons voir les modifications de la taille d'affichage requise sur différents écrans.
Nous devons créer des dossiers de valeurs différentes pour différents écrans et placer le fichier dimens.xml en fonction de la densité de l'écran.
J'ai pris un TextView et observé les changements quand j'ai changé dimens.xml dans différents dossiers de valeurs.
S'il vous plaît suivez le processus
Les appareils ci-dessous peuvent changer la taille des écrans quand on change la normale - xhdpi\dimens.xml
nexus 5X (5.2 "* 1080 * 1920: 420 dpi)
lien 6P (5,7 "* 1440 * 2560: 560 dpi)
lien 6 (6.0 "* 1440 * 2560: 560 dpi)
lien 5 (5.0 ", 108 1920: xxhdpi)
lien 4 (4.7 ", 768 * 1280: xhdpi)
Nexus Galaxy (4.7 ", 720 * 1280: xhdpi)
4,65 "720p (720 * 1280: xhdpi)
WXGA 4,7 "(1280 * 720: Xhdpi)
Les appareils ci-dessous peuvent modifier la taille des écrans lorsque nous modifions le fichier Xlarge - xhdpi\dimens.xml.
lien 9 (8.9 ", 2048 * 1556: xhdpi)
lien 10 (10.1 ", 2560 * 1600: xhdpi)
Les appareils ci-dessous peuvent changer la taille des écrans quand on change le gros - xhdpi\dimens.xml
lien 7 (7.0 ", 1200 * 1920: xhdpi)
nexus 7 (2012) (7.0 ", 800 * 1280: tvdpi)
Les appareils ci-dessous peuvent changer la taille des écrans quand on change le grand - mdpi\dimens.xml
WVGA 5.1 "(480 * 800: mdpi)
FWVGA 5.4 "(480 * 854: mdpi)
7.0 "WSVGA (Tablet) (1024 * 600: mdpi)
Les appareils ci-dessous peuvent changer la taille des écrans quand on change la normale - hdpi\dimens.xml
nexus s (4.0 ", 480 * 800: hdpi)
nexus one (3.7 ", 480 * 800: hdpi)
Les appareils ci-dessous peuvent changer la taille des écrans quand on change le petit - ldpi\dimens.xml
2.7 "QVGA Slider (240 * 320: ldpi)
2.7 "QVGA (240 * 320: ldpi)
Les appareils ci-dessous peuvent changer la taille des écrans quand on change le xlarge - mdpi\dimens.xml
10.1 "WXGA (tABLET) (1280 * 800: MDPI)
Les appareils ci-dessous peuvent changer la taille des écrans quand on change la normale - ldpi\dimens.xml
WQVGA 3,3 "(240 * 400: LDPI)
WQVGA 3,4 "(240 * 432: LDPI)
Les appareils ci-dessous peuvent changer la taille des écrans quand on change la normale - hdpi\dimens.xml
4.0 "WVGA (480 * 800: hdpi)
3.7 "WVGA (480 * 800: hdpi)
3.7 "FWVGA Slider (480 * 854: hdpi)
Les appareils ci-dessous peuvent changer la taille des écrans quand on change la normale - mdpi\dimens.xml
3.2 "HVGA Slider (ADP1) (320 * 480: MDPI)
3.2 "QVGA (ADP2) (320 * 480: MDPI)
J'ai téléchargé un simple programme Java qui prend l'emplacement de votre projet et le fichier de dimension souhaité. Sur cette base, il générerait le fichier de dimension correspondant dans la console. Voici le lien vers cela:
https://github.com/akeshwar/Dimens-for-different-screens-in-Android/blob/master/Main.Java
Voici le code complet pour la référence:
public class Main {
/**
* You can change your factors here. The current factors are in accordance with the official documentation.
*/
private static final double LDPI_FACTOR = 0.375;
private static final double MDPI_FACTOR = 0.5;
private static final double HDPI_FACTOR = 0.75;
private static final double XHDPI_FACTOR = 1.0;
private static final double XXHDPI_FACTOR = 1.5;
private static final double XXXHDPI_FACTOR = 2.0;
private static double factor;
public static void main(String[] args) throws IOException {
Scanner in = new Scanner(System.in);
System.out.println("Enter the location of the project/module");
String projectPath = in.nextLine();
System.out.println("Which of the following dimension file do you want?\n1. ldpi \n2. mdpi \n3. hdpi \n4. xhdpi \n5. xxhdpi \n6. xxxhdpi");
int dimenType = in.nextInt();
switch (dimenType) {
case 1: factor = LDPI_FACTOR;
break;
case 2: factor = MDPI_FACTOR;
break;
case 3: factor = HDPI_FACTOR;
break;
case 4: factor = XHDPI_FACTOR;
break;
case 5: factor = XXHDPI_FACTOR;
break;
case 6: factor = XXXHDPI_FACTOR;
break;
default:
factor = 1.0;
}
//full path = "/home/akeshwar/Android-sat-bothIncluded-notintegrated/code/tpr-5-5-9/princetonReview/src/main/res/values/dimens.xml"
//location of the project or module = "/home/akeshwar/Android-sat-bothIncluded-notintegrated/code/tpr-5-5-9/princetonReview/"
/**
* In case there is some I/O exception with the file, you can directly copy-paste the full path to the file here:
*/
String fullPath = projectPath + "/src/main/res/values/dimens.xml";
FileInputStream fstream = new FileInputStream(fullPath);
BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
String strLine;
while ((strLine = br.readLine()) != null) {
modifyLine(strLine);
}
br.close();
}
private static void modifyLine(String line) {
/**
* Well, this is how I'm detecting if the line has some dimension value or not.
*/
if(line.contains("p</")) {
int endIndex = line.indexOf("p</");
//since indexOf returns the first instance of the occurring string. And, the actual dimension would follow after the first ">" in the screen
int begIndex = line.indexOf(">");
String prefix = line.substring(0, begIndex+1);
String root = line.substring(begIndex+1, endIndex-1);
String suffix = line.substring(endIndex-1,line.length());
/**
* Now, we have the root. We can use it to create different dimensions. Root is simply the dimension number.
*/
double dimens = Double.parseDouble(root);
dimens = dimens*factor*1000;
dimens = (double)((int)dimens);
dimens = dimens/1000;
root = dimens + "";
System.out.println(prefix + " " + root + " " + suffix );
}
System.out.println(line);
}
}
Vous devez créer un dossier values
différent pour différents écrans et mettre le fichier dimens.xml
en fonction de la densité.
1) values
2) values-hdpi (320x480 ,480x800)
3) values-large-hdpi (600x1024)
4) values-xlarge (720x1280 ,768x1280 ,800x1280 ,Nexus7 ,Nexus10)
5) values-sw480dp (5.1' WVGA screen)
6) values-xhdpi (Nexus4 , Galaxy Nexus)
Vous pouvez mettre dimens.xml
dans
1) valeurs
2) valeurs-hdpi
3) values-xhdpi
4) valeurs-xxhdpi
Et donnez différentes tailles dans dimens.xml
dans les dossiers correspondants en fonction de la densité.
Il existe de belles bibliothèques qui gèrent tout et réduisent votre douleur. Pour l'utiliser, ajoutez simplement deux dépendances dans gradle:
implementation 'com.intuit.ssp:ssp-Android:1.0.5'
implementation 'com.intuit.sdp:sdp-Android:1.0.5'
Après cela, utilisez dimens
comme ceci:
Android:layout_marginTop="@dimen/_80sdp"
Si vous souhaitez en voir plus: voici un lien pour une liste de périphériques (tablettes, téléphones portables, montres), y compris watch
, chromebook
, windows
et mac
. Ici vous pouvez trouver la densité, les dimensions, etc. Il suffit de le baser ici, c'est une bonne ressource si vous utilisez également un émulateur.
Si vous cliquez sur un élément spécifique, il affichera plus de détails dans le côté droit.
Puisqu'il s'agit de Android
, je posterai les articles qui s'y rapportent.
~ C’est mieux si vous enregistrez une copie du Web. Pour le voir hors ligne.
Android 3.2 introduit une nouvelle approche de la taille de l’écran, les chiffres décrivant la taille de l’écran sont tous exprimés en unités "dp".
plus petite largeur dp: la plus petite largeur disponible pour la présentation d'application en unités "dp"; c'est la plus petite largeur dp que vous rencontrerez dans n'importe quelle rotation de l'affichage.
Pour créer un clic droit sur res >>> nouvea >>> répertoire de ressources Android
De qualificatifs disponibles déplacement de la fenêtre plus petite largeur d'écran à qualificatifs choisis
Dans la fenêtre Largeur de l'écran, il suffit d'écrire la valeur "dp" à partir de laquelle vous souhaitez que Android Studio utilise cette valeur.
Puis passez à la vue Projet, cliquez avec le bouton droit sur votre nouveau répertoire de ressources créé.
nouvea >>> fichier de ressources Values entrez un nouveau nom de fichier dimens.xml et vous avez terminé.