Я хочу проверить это, чтобы получать различные изображения через Интернет. Как это сделать?
Как проверить устройство Android - это экран HDPI или экран MDPI?
Ответ 1
density = getResources().getDisplayMetrics().density;
// return 0.75 if it LDPI
// return 1.0 if it MDPI
// return 1.5 if it HDPI
// return 2.0 if it XHDPI
// return 3.0 if it XXHDPI
// return 4.0 if it XXXHDPI
Ответ 2
Вы можете проверить плотность экрана с помощью:
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 Имейте в виду, что по мере развития Android в случаях switch
должны быть включены другие значения. Начиная с этого редактирования, это включает DisplayMetrics.DENSITY_TV
и DisplayMetrics.DENSITY_XXHIGH
. Проконсультируйтесь с с документами для получения последней информации; Я не собираюсь поддерживать этот ответ.
Ответ 3
Начиная с 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
Из приведенных выше ответов я объединил их и создал следующую функцию:
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));
}
Ответ 5
Для React Native проверить, какой размер устройства в данный момент
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";
}
Ответ 6
На некоторых устройствах (моя Galaxy Tab3) плотность и плотность Dpi возвращают странные значения, такие как 1.33 (плотность), 213 (плотность Dpi). Поэтому я хочу добавить этот флаг:
< item type = "bool" name= "is_mdpi" > [bool] </item>
< item тип = "BOOL" name=" is_hdpi" > [bool] </item>
< item тип = "BOOL" name=" is_xhdpi " > [bool] </item>
< item тип = "BOOL" name= "is_xxhdpi" & триазоло [BOOL] </элемент >
к 4 файлам values.xml, поместите их под соответствующими res/values- [xxx]/folders.