Как проверить устройство Android на экране HDPI или экране MDPI? - PullRequest
114 голосов
/ 24 февраля 2011

Я хочу проверить это, чтобы получать различные изображения через Интернет. Как это сделать?

Ответы [ 6 ]

209 голосов
/ 24 февраля 2011
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
183 голосов
/ 24 февраля 2011

Вы можете проверить плотность экрана с помощью:

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

РЕДАКТИРОВАТЬ Имейте в виду, что по мере развития Android другие значения должны включаться в случаи switch. На момент редактирования это включает DisplayMetrics.DENSITY_TV и DisplayMetrics.DENSITY_XXHIGH. Консультируйтесь с документами для последней информации; Я не собираюсь поддерживать этот ответ.

5 голосов
/ 22 августа 2018

Начиная с 2018 года, вы можете использовать следующий метод -

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

Но, как указал @Ted, всегда обращайтесь к официальным документам перед использованием

4 голосов
/ 20 июля 2017

Из приведенных выше ответов я объединил их и создал следующую функцию:

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

Теперь, на каком устройстве вы хотите получить информацию о плотности и в какой папке он будет использоваться, просто добавьте вышеупомянутый метод в этом упражнении и добавьте строку ниже в onCreate

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

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

}
1 голос
/ 17 марта 2019

Для React Native проверить, какой размер устройства в данный момент

import { PixelRatio } from 'react-native';   
 switch(PixelRatio.get()) {
      case 1:
      return "mdpi";
      break;
      case 1.5:
      return "hdpi";
      break;
      case 2:
      return "xhdpi";
      break;
      case 3:
      return "xxhdpi";
      break;
      case 3.5:
      return "xxxhdpi";
      break;
    }
0 голосов
/ 03 октября 2013

На некоторых устройствах (у меня Galaxy Tab3) и плотность, и плотность точек на дюйм возвращают странные значения, такие как 1,33 (плотность), 213 (плотность точек на дюйм). Поэтому мое решение состоит в том, чтобы добавить эти флаги:

[bool]
[bool]
[bool]
[BOOL]

до 4 файла values.xml, поместите их в соответствующие папки res / values- [xxx] /.

...