ฉันต้องการตรวจสอบสิ่งนี้เพื่อดึงภาพต่างๆทางอินเทอร์เน็ต ต้องทำอย่างไร?
ฉันต้องการตรวจสอบสิ่งนี้เพื่อดึงภาพต่างๆทางอินเทอร์เน็ต ต้องทำอย่างไร?
คำตอบ:
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
คุณสามารถตรวจสอบความหนาแน่นของหน้าจอได้ด้วย:
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
ปรึกษาเอกสารสำหรับข้อมูลล่าสุด; ฉันจะไม่กังวลกับการรักษาคำตอบนี้
density
ตามที่ SteD แนะนำ)
DENSITY_XXHIGH
ไว้ด้วย ฉันได้เพิ่มข้อจำกัดความรับผิดชอบในคำตอบเพื่อให้ครอบคลุมทุกกรณีในอนาคต :)
ในปี 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 ชี้ให้ศึกษาเอกสารอย่างเป็นทางการก่อนใช้เสมอ
จากคำตอบข้างต้นฉันได้รวมเข้าด้วยกันและสร้างฟังก์ชันด้านล่าง:
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));
}
สำหรับ 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";
}
PixelRatio.get()
จะส่งคืนค่าช่วงขึ้นอยู่กับขนาดการแสดงผลที่ตั้งไว้ในการตั้งค่า Android และ dpi ค่าเหล่านี้จะไม่รวมกับค่าที่คุณได้ขีดไว้
ในอุปกรณ์บางอย่าง (ของฉันคือ Galaxy Tab3) ทั้งความหนาแน่นและความหนาแน่น DPI จะส่งคืนค่าแปลก ๆ เช่น 1.33 (ความหนาแน่น), 213 (ความหนาแน่น DPI) ดังนั้นวิธีแก้ปัญหาของฉันคือเพิ่มค่าสถานะเหล่านี้:
<item type = "bool" name = "is_mdpi"> [บูล] </item>
<item type = "bool" name = "is_hdpi"> [bool] </item>
<item type = "bool" name = " is_xhdpi "> [บูล] </item>
<item type =" bool "name =" is_xxhdpi "> [บูล] </item>
เป็น 4 ไฟล์ values.xml วางไว้ภายใต้ res / values- [xxx] / โฟลเดอร์ที่สอดคล้องกัน