XML से आयाम प्राप्त करें और रनटाइम में टेक्स्ट का आकार सेट करें


101

Dimens.xml में, मेरे पास:

<dimen name="text_medium">18sp</dimen>

रनटाइम में, मुझे यह मान मिलता है और टेक्स्ट व्यू का टेक्स्ट साइज़ सेट करता है:

int size = context.getResources().getDimensionPixelSize(R.dimen.text_medium);
textView.setTextSize(size).

10 a टैबलेट (1280 x 800) पर, सब कुछ ठीक है; लेकिन एक फोन (800 x 480) पर, पाठ दृश्य में एक बहुत बड़ा फ़ॉन्ट है। टैबलेट पर, आकार 18 के बराबर होता है; फोन पर, यह 27 है।

यदि मैंने आकार मैन्युअल रूप से सेट किया है:

textView.setTextSize(size)

दोनों उपकरणों पर आकार सामान्य है।

जवाबों:


297
<dimen name="text_medium">18sp</dimen>

कोड में आकार सेट करें:

textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.text_medium));

7
मैं ओपी के बारे में नहीं जानता, लेकिन यह वह उत्तर था जिसकी मुझे तलाश थी। मैं COMPLEX_UNIT_DP सोच का उपयोग कर रहा था कि मुझे इनपुट प्रकार निर्दिष्ट करने की आवश्यकता है न कि आउटपुट प्रकार।
हेनरी एडम्सजेयर

जब मैं अपना फ़ॉन्ट आकार प्राप्त करता हूं (एक सपा में परिभाषित) मुझे 60 मिलता है। जब मैं इसे OMPLEX_UNIT_PX के साथ वापस सेट करता हूं और फिर से प्राप्त करता हूं तो मुझे 70 मिलता है। ऐसा लगता है कि यहां सब कुछ स्पष्ट नहीं है
Gleichmut

2
पाठ आकार के लिए, मैं TypedValue.COMPLEX_UNIT_SPइसके बजाय क्यों उपयोग नहीं कर सकता ?
dphans

3
@dps Resources.getDimension()विधि वह मान लौटाती है जो पहले से ही उपयुक्त मीट्रिक से कई गुना अधिक है
pkuszewski

2
@pkuszewski वाह, यह बहुत भ्रामक है।
Big_Chair

4

दोनों तरीके getDimensionPixelSize () और getDimension () पिक्सेल की गणना के लिए स्क्रीन घनत्व का उपयोग करते हैं। आपके फोन की स्क्रीन का घनत्व स्पष्ट रूप से hdpi (240dpi) है, इसलिए यह dp को sp में बदलने के लिए 1.5 स्केल का उपयोग करता है। सरल गणित 18 * 1.5 = 27।

ऐसा लगता है कि आपके टैबलेट का घनत्व mdpi (160dpi) है, इसलिए स्केल केवल 1: 1 है।

लेकिन यदि आप दोनों ग्रंथों के वास्तविक आकार की तुलना करते हैं तो यह समान होना चाहिए।

सबसे अच्छा तरीका सिर्फ फोन के लिए वैल्यू फ़ोल्डर में दो डिमेन्स.एक्सएमएल फाइल बनाना है, और टैबलेट के लिए वैल्यू-स्व 600 डीपीपी में एक और (आप लैंडस्केप ओरिएंटेशन में 10 इंच टैबलेट के आयामों को स्टोर करने के लिए वैल्यूज- sw720dp- लैंड फोल्डर का भी इस्तेमाल कर सकते हैं)।

आप Android पर आयामों के बारे में अधिक पढ़ सकते हैं: http://android4beginners.com/2013/07/appendix-c-everything-about-sizes-and-dimensions-in-android/


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.