2012-06-20 6 views
234

मैं मान को लोड करना चाहता हूं। मेरे पास दो dimension.xml फ़ाइलें हैं, /res/values/dimension.xml में से एक और दूसरा /res/values-sw360dp/dimension.xml में है।स्रोत कोड से res/values ​​/ dimension.xml से लोड आयाम मान

स्रोत कोड से मैं की तरह

getResources().getDimension(R.dimen.tutorial_cross_marginTop); 

यह काम करता है लेकिन मूल्य मैं बढ़ी बार स्क्रीन घनत्व कारक (hdpi के लिए 1.5, xhdpi के लिए 2.0, आदि) है कुछ करने के लिए करना चाहते हैं।

मैं भी

getResources().getString(R.dimen.tutorial_cross_marginTop); 

करने की कोशिश की इस सिद्धांत में काम करेगा, लेकिन मैं एक स्ट्रिंग है "डुबकी लगाना" में समाप्त होता है मिलता है ...

+1

मुझे आश्चर्य है कि अगर यह एंड्रॉयड में बग है के रूप में संसाधन विधि है 'getDimensionPixelSize (पूर्णांक आईडी)' कि वास्तव में कहा गया है कि यह पिक्सेल में देता है, तो 'getDimension (पूर्णांक आईडी)' डी पी में लौट जाना चाहिए (निर्भरता स्वतंत्र इकाइयां), जो उपयोग के लिए तैयार होगा, उदाहरण के लिए देखें 'setPadding' –

उत्तर

585

मेरी dimens.xml में मैं

है
<dimen name="test">48dp</dimen> 

कोड में अगर मैं कर

int valueInPixels = (int) getResources().getDimension(R.dimen.test) 

इस 72 जो डॉक्स राज्य के रूप में (मेरे मामले में 48dp x 1.5) वर्तमान फ़ोन के घनत्व से गुणा किया जाता

वापस आ जाएगी बिल्कुल डॉक्स राज्य के रूप में:

एक विशेष संसाधन आईडी के लिए एक आयामी प्राप्त करें। यूनिट रूपांतरण संसाधनों से जुड़े वर्तमान प्रदर्शन मेट्रिक्स पर आधारित हैं।

तो

आप सटीक डीपी मूल्य बस के रूप में xml में सिर्फ DisplayMetrics घनत्व के साथ विभाजित करना चाहते हैं

int dp = (int) (getResources().getDimension(R.dimen.test)/getResources().getDisplayMetrics().density) 

डीपी हो जाएगा 48 अब

+1

मुझे लगता है कि दस्तावेज़ीकरण यहां विशेष रूप से अस्पष्ट है। "यूनिट रूपांतरण संसाधनों से जुड़े वर्तमान प्रदर्शन मेट्रिक्स पर आधारित हैं।" जब वे सब कहना चाहते हैं कि वे पिक्सेल में परिवर्तित हो जाते हैं। – Trilarion

+0

यदि आप अनिवार्य रूप से प्रदर्शन मेट्रिक्स गुणक को त्यागने जा रहे हैं, तो आप अपने आयाम को पीएक्स में भी परिभाषित कर सकते हैं। 48px। getDimension (R.dimen.test) 48 लौटाएगा। –

1
This works but the value I get is multiplied times the screen density factor 
    (1.5 for hdpi, 2.0 for xhdpi, etc). 

मुझे लगता है कि यह अच्छा है रिज़ॉल्यूशन के अनुसार मूल्य प्राप्त करने के लिए, लेकिन यदि आप ऐसा नहीं करना चाहते हैं तो इसे पीएक्स में दें .......

घनत्व-स्वतंत्र पिक्सेल (डीपी)

वर्चुअल पिक्सेल इकाई जिसे यूआई लेआउट को परिभाषित करते समय उपयोग करना चाहिए, लेआउट आयामों को व्यक्त करने या घनत्व-स्वतंत्र तरीके से स्थिति व्यक्त करने के लिए। घनत्व-स्वतंत्र पिक्सेल एक 160 डीपीआई स्क्रीन पर एक भौतिक पिक्सेल के बराबर है, जो "मध्यम" घनत्व स्क्रीन के लिए सिस्टम द्वारा मानी जाने वाली बेसलाइन घनत्व है। रनटाइम पर, सिस्टम डीपी इकाइयों की किसी भी स्केलिंग को पारदर्शी रूप से संभालता है, based on the actual density of the screen in use. The conversion of dp units to screen pixels is simple: px = dp * (dpi/160). For example, on a 240 dpi screen, 1 dp equals 1.5 physical pixels. आपको विभिन्न अनुप्रयोगों के साथ स्क्रीन पर अपने यूआई के उचित प्रदर्शन को सुनिश्चित करने के लिए हमेशा अपने एप्लिकेशन के यूआई को परिभाषित करते समय डीपी इकाइयों का उपयोग करना चाहिए।

मुझे लगता है कि यह अच्छा है प्रति संकल्प के रूप में मान बदलने के लिए, लेकिन अगर आप नहीं करना चाहते इस पिक्सल में इस दे .......

इस

के अनुसार इस link

उल्लेख

डीपी

घनत्व-स्वतंत्र पिक्सेल - एक सारणी इकाई जो स्क्रीन के भौतिक घनत्व पर आधारित है। ये इकाइयां 160 डीपीआई (डॉट्स प्रति इंच) स्क्रीन के सापेक्ष हैं, जिस पर 1 डीपी लगभग 1 पीएक्स के बराबर है। When running on a higher density screen, the number of pixels used to draw 1dp is scaled up by a factor appropriate for the screen's dpi. Likewise, when on a lower density screen, the number of pixels used for 1dp is scaled down. डीपी-टू-पिक्सेल का अनुपात स्क्रीन घनत्व के साथ बदल जाएगा, लेकिन जरूरी नहीं कि सीधे अनुपात में। डीपी इकाइयों (पीएक्स इकाइयों के बजाए) का उपयोग करना आपके लेआउट में दृश्य आयामों को विभिन्न स्क्रीन घनत्वों के लिए सही ढंग से आकार देने का एक आसान समाधान है। दूसरे शब्दों में, यह विभिन्न उपकरणों में आपके यूआई तत्वों के असली दुनिया के आकार के लिए स्थिरता प्रदान करता है।

पिक्सल

पिक्सल - स्क्रीन पर वास्तविक पिक्सल के अनुरूप। माप की यह इकाई अनुशंसित नहीं है क्योंकि वास्तविक प्रतिनिधित्व डिवाइसों में भिन्न हो सकता है; प्रत्येक डिवाइस में प्रति इंच पिक्सल की एक अलग संख्या हो सकती है और स्क्रीन पर अधिक या कम कुल पिक्सल उपलब्ध हो सकते हैं।

21

Resource कक्षा में एक विधि getDimensionPixelSize() है जो मुझे लगता है कि आपकी आवश्यकताओं के अनुरूप होगा।

+21

यह गलत है! मेट्रिक्स रूपांतरण भी 'getDimensionPixelSize()' में होता है यदि आप दस्तावेज़ों को स्पष्ट रूप से ** ** ** लौटते हैं, संसाधन आयाम मान उचित मीट्रिक द्वारा गुणा किया गया है और पूर्णांक पिक्सेल में छोटा कर दिया गया है। –

+0

यह गलत है। मेट्रिक्स रूपांतरण इस विधि का भी उपयोग करता है। –

-1

आप उदाहरण के अपने दूसरे के लिए अपनी एक विधि का उपयोग, और परिणाम में ये पंक्तियां जोड़ सकते हैं:

int stringLength = getResources().getString(R.dimen.tutorial_cross_marginTop).length(); 
string stringDimensions = getResources().getString(R.dimen.tutorial_cross_marginTop); 
int dimension = Integer.parseInt(stringDimensions.substring(stringLength-3, stringLength-1)); 

मुझे आशा है कि मदद करता है :)

4

उन जो सिर्फ संसाधनों में कुछ int मूल्य को बचाने की जरूरत के लिए, आप निम्नलिखित कर सकते हैं।

integers.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <integer name="default_value">100</integer> 
</resources> 

कोड

int defaultValue = getResources().getInteger(R.integer.default_value); 
+1

इसके लिए धन्यवाद, मैं जो कुछ भी ढूंढ रहा था, वह शायद दूसरों के लिए नहीं था, लेकिन यह समाधान वास्तव में मुझे मेरे कोड के अन्य क्षेत्रों में कुछ अंतर्दृष्टि प्रदान करता था – JamisonMan111

0

आप getDimensionPixelOffset (उपयोग कर सकते हैं) getDimension के बजाय है, तो आप पूर्णांक को कास्ट करने के लिए नहीं था।

int valueInPixels = getResources().getDimensionPixelOffset(R.dimen.test) 
संबंधित मुद्दे