Antworten:
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;
}
BEARBEITEN Beachten Sie, dass im Zuge der Weiterentwicklung von Android andere Werte in die switch
Fälle aufgenommen werden sollten. 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.
density
wie von SteD vorgeschlagen.)
DENSITY_XXHIGH
. Ich habe der Antwort einen Haftungsausschluss hinzugefügt, um alle zukünftigen Fälle abzudecken. :)
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;
}
Fügen Sie nun auf welchem Gerät, auf dem Sie die Dichteinformationen abrufen möchten und in welchem Ordner sie verwendet werden sollen, 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));
}
Damit React Native überprüfen kann, welche Größe derzeit vom Gerät stammt
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";
}
PixelRatio.get()
Gibt abhängig von der in den Android-Einstellungen festgelegten Anzeigegröße und der Auflösung eine Reihe von Werten zurück. Diese Werte stimmen nicht mit den genauen Werten überein, die Sie festgelegt haben.
Auf einigen Geräten (meins ist Galaxy Tab3) geben sowohl Dichte als auch DichteDpi seltsame Werte wie 1,33 (Dichte), 213 (DichteDpi) zurück. Meine Lösung besteht also darin, dieses Flag 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>
Fügen Sie diese in 4 values.xml-Dateien unter den entsprechenden Ordnern res / values- [xxx] / ein.