Existe-t-il un moyen de déterminer la catégorie de taille d'écran de l'appareil actuel, comme petit, normal, grand, xlarge ?
Pas la densité, mais la taille de l'écran.
Existe-t-il un moyen de déterminer la catégorie de taille d'écran de l'appareil actuel, comme petit, normal, grand, xlarge ?
Pas la densité, mais la taille de l'écran.
Vous pouvez utiliser le Configuration.screenLayout
bitmask.
Exemple :
if ((getResources().getConfiguration().screenLayout &
Configuration.SCREENLAYOUT_SIZE_MASK) ==
Configuration.SCREENLAYOUT_SIZE_LARGE) {
// on a large screen device ...
}
Pour obtenir la détection x-large, assurez-vous d'utiliser la cible Android-3.0 dans votre projet. Ou utilisez la valeur statique 4 pour x-large.
Certains appareils peuvent avoir une taille d'écran UNDEFINED, il peut donc être utile de vérifier également avec Configuration.SCREENLAYOUT_SIZE_UNDEFINED.
Le code ci-dessous étoffe la réponse ci-dessus, en affichant l'icône la taille de l'écran comme un toast.
//Determine screen size
if ((getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_LARGE) {
Toast.makeText(this, "Large screen", Toast.LENGTH_LONG).show();
}
else if ((getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_NORMAL) {
Toast.makeText(this, "Normal sized screen", Toast.LENGTH_LONG).show();
}
else if ((getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_SMALL) {
Toast.makeText(this, "Small sized screen", Toast.LENGTH_LONG).show();
}
else {
Toast.makeText(this, "Screen size is neither large, normal or small", Toast.LENGTH_LONG).show();
}
Le code ci-dessous affiche le densité de l'écran comme un toast.
//Determine density
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int density = metrics.densityDpi;
if (density == DisplayMetrics.DENSITY_HIGH) {
Toast.makeText(this, "DENSITY_HIGH... Density is " + String.valueOf(density), Toast.LENGTH_LONG).show();
}
else if (density == DisplayMetrics.DENSITY_MEDIUM) {
Toast.makeText(this, "DENSITY_MEDIUM... Density is " + String.valueOf(density), Toast.LENGTH_LONG).show();
}
else if (density == DisplayMetrics.DENSITY_LOW) {
Toast.makeText(this, "DENSITY_LOW... Density is " + String.valueOf(density), Toast.LENGTH_LONG).show();
}
else {
Toast.makeText(this, "Density is neither HIGH, MEDIUM OR LOW. Density is " + String.valueOf(density), Toast.LENGTH_LONG).show();
}
Jeff Gilfelt comme une méthode d'aide statique :
private static String getSizeName(Context context) {
int screenLayout = context.getResources().getConfiguration().screenLayout;
screenLayout &= Configuration.SCREENLAYOUT_SIZE_MASK;
switch (screenLayout) {
case Configuration.SCREENLAYOUT_SIZE_SMALL:
return "small";
case Configuration.SCREENLAYOUT_SIZE_NORMAL:
return "normal";
case Configuration.SCREENLAYOUT_SIZE_LARGE:
return "large";
case 4: // Configuration.SCREENLAYOUT_SIZE_XLARGE is API >= 9
return "xlarge";
default:
return "undefined";
}
}
Merci pour les réponses ci-dessus, cela m'a beaucoup aidé :-) Mais pour ceux (comme moi) qui sont obligés de continuer à supporter Android 1.5, nous pouvons utiliser la réflexion java pour une compatibilité descendante :
Configuration conf = getResources().getConfiguration();
int screenLayout = 1; // application default behavior
try {
Field field = conf.getClass().getDeclaredField("screenLayout");
screenLayout = field.getInt(conf);
} catch (Exception e) {
// NoSuchFieldException or related stuff
}
// Configuration.SCREENLAYOUT_SIZE_MASK == 15
int screenType = screenLayout & 15;
// Configuration.SCREENLAYOUT_SIZE_SMALL == 1
// Configuration.SCREENLAYOUT_SIZE_NORMAL == 2
// Configuration.SCREENLAYOUT_SIZE_LARGE == 3
// Configuration.SCREENLAYOUT_SIZE_XLARGE == 4
if (screenType == 1) {
...
} else if (screenType == 2) {
...
} else if (screenType == 3) {
...
} else if (screenType == 4) {
...
} else { // undefined
...
}
Vous pouvez cibler la dernière version de la plate-forme et faire référence aux constantes de la page d'accueil. Configuration
classe. Il s'agit de valeurs finales statiques qui seront intégrées au moment de la compilation (c'est-à-dire qu'elles seront remplacées par leurs valeurs réelles), de sorte que votre code ne sera pas cassé sur les anciennes versions de la plate-forme.
Si vous souhaitez connaître facilement la densité et la taille de l'écran d'un appareil Android, vous pouvez utiliser cette application gratuite (aucune autorisation requise) : https://market.Android.com/details?id=com.jotabout.screeninfo
Cette question ne porte pas sur un appareil spécifique, mais sur la programmation pour des profils de division multiples (ce qui est un processus de développement logiciel important lorsqu'on développe pour des plateformes mobiles).
Bonne application pour savoir qu'elle est disponible sur le marché - il serait également intéressant de voir le code utilisé par l'application pour obtenir ses informations
@StanKurdziel Le code source est publié sous la licence open-source MIT et est disponible à l'adresse suivante : github.com/mportuesisf/ScreenInfo
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.