2011-02-16 14 views
6

का उपयोग किए बिना पिक्सेल इकाइयों (जैसे एसपी, पीएक्स, डीपी) निर्दिष्ट करना एंड्रॉइड कोड में पिक्सेल इकाई निर्दिष्ट करना संभव है। मैं क्या मतलब है, मैं एक लेआउट है और मैं आकार 20dp होना चाहता हूँ कहते हैं, फिर वहाँ एक लेआउट एक्सएमएलएंड्रॉइड एक्सएमएल

उत्तर

26

लेखन में एक ध्यान में रखते हुए बिना ऐसा करने के लिए किसी भी तरह से है:

DisplayMetrics metrics = getContext().getResources().getDisplayMetrics(); 
float dp = 20f; 
float fpixels = metrics.density * dp; 
int pixels = (int) (fpixels + 0.5f); 

में एक गतिविधि, ज़ाहिर है, आप getContext() छोड़ देते हैं।

स्केल किए गए पिक्सल (sp) से पिक्सेल में कनवर्ट करने के लिए, metrics.density के बजाय बस metrics.scaledDensity का उपयोग करें।

संपादित करें: जैसा कि @Santosh's answer अंक बाहर है, तो आप एक ही बात उपयोगिता वर्ग TypedValue उपयोग कर सकते हैं: sp लिए

DisplayMetrics metrics = getContext().getResources().getDisplayMetrics(); 
float dp = 20f; 
float fpixels = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, metrics); 
int pixels = Math.round(fpixels); 

, TypedValue.COMPLEX_UNIT_DIP के लिए स्थानापन्न TypedValue.COMPLEX_UNIT_SP

आंतरिक रूप से, applyDimension() बिल्कुल मेरे कोड के जैसा ही गणना करता है। उपयोग करने के लिए कौन सा संस्करण आपकी कोडिंग शैली का विषय है।

+2

में मदद तुम क्यों 0.5 जोड़ सकता हूँ शामिल करने के बराबर है? – pankajagarwal

+3

गोल करने के लिए, यह ढांचा क्या करता है। यह सुनिश्चित करता है कि आकार कभी भी 0px नहीं होगा। –

+0

धन्यवाद, यह अब बहुत तार्किक लगता है :) – pankajagarwal

4

अब आप उपयोग कर सकते हैं

float pixels = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 20, getResources().getDisplayMetrics()); 

, pixels का मूल्य 20dp

TypedValue अन्य इसी तरह के तरीकों कि रूपांतरण

संबंधित मुद्दे