setWidth (พิกเซล int) ใช้พิกเซลอิสระของอุปกรณ์หรือพิกเซลทางกายภาพเป็นหน่วยหรือไม่ ตัวอย่างเช่น setWidth (100) ตั้งค่าความกว้างของมุมมองเป็น 100 dips หรือ 100 px หรือไม่
ขอบคุณ.
setWidth (พิกเซล int) ใช้พิกเซลอิสระของอุปกรณ์หรือพิกเซลทางกายภาพเป็นหน่วยหรือไม่ ตัวอย่างเช่น setWidth (100) ตั้งค่าความกว้างของมุมมองเป็น 100 dips หรือ 100 px หรือไม่
ขอบคุณ.
คำตอบ:
ใช้พิกเซล แต่ฉันแน่ใจว่าคุณสงสัยว่าจะใช้ dips แทนได้อย่างไร TypedValue.applyDimension()
คำตอบคือใน นี่คือตัวอย่างวิธีการแปลง dips เป็น px ในโค้ด:
// Converts 14 dip into its equivalent px
Resources r = getResources();
int px = Math.round(TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP, 14,r.getDisplayMetrics()));
วิธีที่ถูกต้องในการรับจำนวน DIP ในโค้ดคงที่คือการสร้างไฟล์ XML ของรีซอร์สที่มีค่า dp เช่น:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="image_width">100dp</dimen>
<dimen name="image_height">75dp</dimen>
</resources>
จากนั้นอ้างถึงทรัพยากรในรหัสของคุณดังนี้:
float width = getResources().getDimension(R.dimen.image_width));
float height = getResources().getDimension(R.dimen.image_height));
โฟลตที่คุณส่งคืนจะถูกปรับขนาดตามความหนาแน่นของพิกเซลของอุปกรณ์ดังนั้นคุณจึงไม่จำเป็นต้องจำลองวิธีการแปลงซ้ำตลอดแอปพลิเคชันของคุณ
วิธี setWidth (100) ตั้งค่าความกว้าง 100 px (ไม่ใช่ dp) ดังนั้นคุณอาจประสบปัญหาความกว้างที่แตกต่างกันในโทรศัพท์ Android รุ่นต่างๆดังนั้นให้ใช้การวัดเป็น dp แทนพิกเซลใช้รหัสด้านล่างเพื่อรับการวัดเป็น dp ของความกว้างตัวอย่าง = 300px และ height = 400px
int width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 300, getResources().getDisplayMetrics());
int Height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 400, getResources().getDisplayMetrics());
float dps = 100;
float pxs = dps * getResources().getDisplayMetrics().density;
พิกเซลแน่นอนวิธีนี้ขอให้พิกเซลเป็นพารามิเตอร์
จากคำตอบข้างต้นซึ่งใช้ได้ดีสำหรับฉันฉันสร้างวิธีการช่วยเหลือบางอย่างเพียงแค่เพิ่มเข้าไปในยูทิลิตี้ของคุณเพื่อใช้ในโครงการทั้งหมด
// value in DP
public static int getValueInDP(Context context, int value){
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, context.getResources().getDisplayMetrics());
}
public static float getValueInDP(Context context, float value){
return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, context.getResources().getDisplayMetrics());
}
// value in PX
public static int getValueInPixel(Context context, int value){
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, value, context.getResources().getDisplayMetrics());
}
public static float getValueInPixel(Context context, float value){
return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, value, context.getResources().getDisplayMetrics());
}