Ich möchte dies überprüfen, um verschiedene Bilder über das Internet abzurufen. Wie geht das?
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
Sie können die Bildschirmdichte überprüfen mit:
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 [~ # ~] Beachten Sie, dass bei der Entwicklung von Android) andere Werte eingeschlossen werden sollten In den Fällen switch
. Ab dieser Bearbeitung umfasst dies DisplayMetrics.DENSITY_TV
und DisplayMetrics.DENSITY_XXHIGH
. Konsultieren Sie die Dokumente für die neuesten Informationen; Ich werde mich nicht darum kümmern, diese Antwort beizubehalten.
Ab 2018 können Sie die folgende Methode verwenden -
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";
}
}
Aber wie @Ted zeigte, konsultieren Sie immer die offiziellen Dokumente, bevor Sie verwenden
Aus den obigen Antworten habe ich sie kombiniert und die folgende Funktion erstellt:
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;
}
Nun, auf welchem Gerät Sie die Dichteinformationen erhalten möchten und in welchem Ordner sie verwendet werden sollen, fügen Sie einfach die obige Methode in diese Aktivität ein und fügen Sie die folgende Zeile in onCreate hinzu
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
Log.d("Screen Density: ", Helper.getDeviceDensity(this));
}
Für React Native, um zu überprüfen, welche Größe des Geräts aktuell ist
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";
}
Auf einigen Geräten (meins ist Galaxy Tab3) geben sowohl Dichte als auch DichteDpi seltsame Werte wie 1,33 (Dichte) und 213 (DichteDpi) zurück. Also meine Lösung ist, diese Flagge hinzuzufügen:
<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>
in 4 values.xml-Dateien legen Sie diese in den entsprechenden res/values- [xxx]/-Ordnern ab.