Comment vérifier qu'un appareil Android est un écran HDPI ou MDPI?

je veux vérifier cela pour obtenir différentes images par internet. Comment faire?

105
demandé sur virsir 2011-02-24 04:56:01

5 réponses

density = getResources().getDisplayMetrics().density;

// return 0.75 if it's LDPI
// return 1.0 if it's MDPI
// return 1.5 if it's HDPI
// return 2.0 if it's XHDPI
// return 3.0 if it's XXHDPI
// return 4.0 if it's XXXHDPI
191
répondu SteD 2016-02-25 07:03:59

vous pouvez vérifier la densité de l'écran avec:

switch (getResources().getDisplayMetrics().densityDpi) {
case DisplayMetrics.DENSITY_LOW:
    // ...
    break;
case DisplayMetrics.DENSITY_MEDIUM:
    // ...
    break;
case DisplayMetrics.DENSITY_HIGH:
    // ...
    break;
case DisplayMetrics.DENSITY_XHIGH:
    // ...
    break;
}

EDIT soyez conscient qu'à mesure que Android évolue, d'autres valeurs devraient être incluses dans les cas switch . À partir de cette édition, Cela inclut DisplayMetrics.DENSITY_TV et DisplayMetrics.DENSITY_XXHIGH . Consultez the docs pour les dernières informations; je ne vais pas m'embêter à maintenir cette réponse.

178
répondu Ted Hopp 2012-11-15 19:30:50

à partir des réponses ci-dessus, je les ai combinées et j'ai créé la fonction suivante:

    public static String getDeviceDensity(Context context){
    String deviceDensity = "";
    switch (context.getResources().getDisplayMetrics().densityDpi) {
        case DisplayMetrics.DENSITY_LOW:
            deviceDensity =  0.75 + " ldpi";
            break;
        case DisplayMetrics.DENSITY_MEDIUM:
            deviceDensity =  1.0 + " mdpi";
            break;
        case DisplayMetrics.DENSITY_HIGH:
            deviceDensity =  1.5 + " hdpi";
            break;
        case DisplayMetrics.DENSITY_XHIGH:
            deviceDensity =  2.0 + " xhdpi";
            break;
        case DisplayMetrics.DENSITY_XXHIGH:
            deviceDensity =  3.0 + " xxhdpi";
            break;
        case DisplayMetrics.DENSITY_XXXHIGH:
            deviceDensity =  4.0 + " xxxhdpi";
            break;
        default:
            deviceDensity = "Not found";
    }
    return deviceDensity;
}

maintenant, sur quel périphérique vous voulez obtenir les informations sur la densité et dans quel dossier elles seront utilisées, ajoutez simplement la méthode ci-dessus dans cette activité et ajoutez la ligne ci-dessous dans onCreate

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);

    Log.d("Screen Density: ", Helper.getDeviceDensity(this));

}
3
répondu Naveed Ahmad 2017-07-20 10:40:09

à partir de 2018, vous pouvez utiliser la méthode -

    public static String getDeviceDensityString(Context context) {
    switch (context.getResources().getDisplayMetrics().densityDpi) {
        case DisplayMetrics.DENSITY_LOW:
            return "ldpi";
        case DisplayMetrics.DENSITY_MEDIUM:
            return "mdpi";
        case DisplayMetrics.DENSITY_TV:
        case DisplayMetrics.DENSITY_HIGH:
            return "hdpi";
        case DisplayMetrics.DENSITY_260:
        case DisplayMetrics.DENSITY_280:
        case DisplayMetrics.DENSITY_300:
        case DisplayMetrics.DENSITY_XHIGH:
            return "xhdpi";
        case DisplayMetrics.DENSITY_340:
        case DisplayMetrics.DENSITY_360:
        case DisplayMetrics.DENSITY_400:
        case DisplayMetrics.DENSITY_420:
        case DisplayMetrics.DENSITY_440:
        case DisplayMetrics.DENSITY_XXHIGH:
            return "xxhdpi";
        case DisplayMetrics.DENSITY_560:
        case DisplayMetrics.DENSITY_XXXHIGH:
            return "xxxhdpi";
    }
}

mais comme @ Ted a indiqué toujours consulter les documents officiels avant d'utiliser

1
répondu Ankit Aggarwal 2018-08-22 14:20:50

sur certains appareils (le mien est Galaxy Tab3), à la fois densité et densityDpi renvoient des valeurs étranges comme 1.33(densité), 213(densityDpi). Donc ma solution est d'ajouter ce drapeau:

[bool]< / item>

[bool]< / item>

[bool]< / item>

[bool]< / item>

à 4 valeurs.les fichiers xml, mettez-les sous res/values - [xxx]/ folders.

0
répondu nlt 2013-10-03 12:09:34