android — Как проверить устройство Android на экране HDPI или экране MDPI?" />

Как проверить устройство Android на экране HDPI или экране MDPI?

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

109 голосов | спросил virsir 24 FebruaryEurope/MoscowbThu, 24 Feb 2011 04:56:01 +0300000000amThu, 24 Feb 2011 04:56:01 +030011 2011, 04:56:01

5 ответов


0
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
ответил SteD 24 FebruaryEurope/MoscowbThu, 24 Feb 2011 05:03:19 +0300000000amThu, 24 Feb 2011 05:03:19 +030011 2011, 05:03:19
0

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

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. Обратитесь к документации для получения последней информации; Я не собираюсь поддерживать этот ответ.

ответил Ted Hopp 24 FebruaryEurope/MoscowbThu, 24 Feb 2011 05:04:09 +0300000000amThu, 24 Feb 2011 05:04:09 +030011 2011, 05:04:09
0

Начиная с 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, всегда обращайтесь к официальным документам перед использованием

ответил Ankit Aggarwal 22 PM00000050000005031 2018, 17:20:50
0

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

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

}
ответил Naveed Ahmad 20 J000000Thursday17 2017, 13:15:06
0

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

  

<item type = "bool"   name = "is_mdpi"> [bool] /item>
& item   тип = "BOOL"   name = "is_hdpi"> [bool] /item>
& item   тип = "BOOL"   name = "is_xhdpi"> [bool] /item>
& item   тип = "BOOL"   имя = "is_xxhdpi" & триазоло [BOOL] & Lt; /элемент >

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

ответил nlt 3 +04002013-10-03T16:09:34+04:00312013bEurope/MoscowThu, 03 Oct 2013 16:09:34 +0400 2013, 16:09:34

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132