ฉันกำลังทำ:
button.setLayoutParams(new GridView.LayoutParams(65, 65));
ตามที่เอกสารหน่วยสำหรับความกว้างและความสูง (ทั้ง 65 ในข้างต้น) เป็น "พิกเซล" คุณจะบังคับให้สิ่งนี้เป็นพิกเซลอิสระของอุปกรณ์หรือ "dp" ได้อย่างไร
ฉันกำลังทำ:
button.setLayoutParams(new GridView.LayoutParams(65, 65));
ตามที่เอกสารหน่วยสำหรับความกว้างและความสูง (ทั้ง 65 ในข้างต้น) เป็น "พิกเซล" คุณจะบังคับให้สิ่งนี้เป็นพิกเซลอิสระของอุปกรณ์หรือ "dp" ได้อย่างไร
คำตอบ:
คุณจะต้องแปลงจาก dps เป็นพิกเซลโดยใช้ขนาดตัวคูณการแสดงผล
final float scale = getContext().getResources().getDisplayMetrics().density;
int pixels = (int) (dps * scale + 0.5f);
dp
ไปpx
? ขอบคุณ
ฉันรู้ว่านี่เป็นคำถามเก่า แต่ฉันได้พบวิธีการแปลงที่สั้นกว่ามากแล้ว
ชวา
TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 65, getResources().getDisplayMetrics());
Kotlin
TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 65f, resources.displayMetrics)
65
ข้างต้นเป็นค่า DP คุณต้องการแปลง PX
ดูที่ความต้องการของคุณมีทางเลือกอื่นเช่นกัน ดูเหมือนว่าคุณจะรู้มิติในหน่วย dp ณ เวลารวบรวมดังนั้นคุณสามารถเพิ่มรายการ dimen ในทรัพยากร จากนั้นคุณสามารถสอบถามรายการ dimen และมันจะถูกแปลงเป็นพิกเซลโดยอัตโนมัติในการโทรนี้:
final float inPixels= mActivity.getResources().getDimension(R.dimen.dimen_entry_in_dp);
และ dimens.xml ของคุณจะมี:
<dimen name="dimen_entry_in_dp">72dp</dimen>
การขยายแนวคิดนี้คุณสามารถเก็บค่าของ 1dp หรือ 1sp เป็นรายการหรี่และค้นหาค่าและใช้เป็นตัวคูณ การใช้วิธีการนี้คุณจะป้องกันรหัสจากเนื้อหาทางคณิตศาสตร์และพึ่งพาห้องสมุดเพื่อทำการคำนวณ
วิธีที่ง่ายที่สุด (และใช้งานได้จาก api 1) ที่ทดสอบคือ:
getResources().getDimensionPixelSize(R.dimen.example_dimen);
จากเอกสาร:
ดึงส่วนข้อมูลสำหรับ ID ทรัพยากรเฉพาะเพื่อใช้เป็นขนาดพิกเซลแบบดิบ นี่เหมือนกับ getDimension (int) ยกเว้นค่าที่ส่งคืนจะถูกแปลงเป็นพิกเซลจำนวนเต็มเพื่อใช้เป็นขนาด การแปลงขนาดเกี่ยวข้องกับการปัดเศษค่าฐานและทำให้แน่ใจว่าค่าฐานที่ไม่เป็นศูนย์มีขนาดอย่างน้อยหนึ่งพิกเซล
ใช่มันจะปัดเศษค่า แต่ก็ไม่ได้แย่มาก (ในค่าคี่บนอุปกรณ์ hdpi และ ldpi ต้องเพิ่มค่าเล็กน้อยเมื่อ ldpi ไม่ธรรมดามาก) ฉันทดสอบในอุปกรณ์ xxhdpi ที่แปลง 4dp เป็น 16 (พิกเซล) และนั่นคือ จริง