web-dev-qa-db-fra.com

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

Je veux vérifier ceci pour aller chercher différentes images par internet. Comment faire ça?

114
virsir
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
211
SteD

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;
}

[~ # ~] éditer [~ # ~] Sachez qu'au fur et à mesure que Android évolue, d'autres valeurs doivent être incluses dans les cas switch. À partir de cette modification, cela inclut DisplayMetrics.DENSITY_TV et DisplayMetrics.DENSITY_XXHIGH. Consultez la documentation pour les dernières informations; Je ne vais pas me soucier de maintenir cette réponse.

183
Ted Hopp

À partir de 2018, vous pouvez utiliser la méthode ci-dessous -

    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 l'a souligné, consultez toujours la documentation officielle avant d'utiliser

6
Ankit Aggarwal

À partir des réponses ci-dessus, je les ai combinées et créé la fonction ci-dessous:

    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 souhaitez obtenir les informations de densité et quel dossier il sera utilisé, ajoutez simplement la méthode ci-dessus à 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));

}
4
Naveed Ahmad

Pour React Native pour vérifier quelle taille est actuellement le périphérique

import { PixelRatio } from 'react-native';   
 switch(PixelRatio.get()) {
      case 1:
      return "mdpi";
      case 1.5:
      return "hdpi";
      case 2:
      return "xhdpi";
      case 3:
      return "xxhdpi";
      case 3.5:
      return "xxxhdpi";
    }
1

Sur certains appareils (le mien est Galaxy Tab3), densité et densitéDpi renvoient des valeurs étranges telles que 1,33 (densité), 213 (densitéDpi). Ma solution consiste donc à ajouter ces indicateurs:

<item type = "bool" name = "is_mdpi"> [bool] </ item>
<item type = "bool" name = "is_hdpi"> [bool] </ item>
<item type = "bool" name = "is_xhdpi"> [bool] </ item>
<item type = "bool" name = "is_xxhdpi"> [bool] </ item>

dans 4 fichiers values.xml, placez-les dans les dossiers res/values- [xxx]/correspondants.

0
nlt