यदि मैं एक TextView
जावा कोड का उपयोग करके एक निश्चित पाठ आकार बदलने के लिए एक पूर्णांक मान प्रदान करता हूं , तो मूल्य को पिक्सेल ( px
) के रूप में व्याख्या किया जाता है ।
अब क्या किसी को पता है कि इसे कैसे सौंपा जाए sp
?
यदि मैं एक TextView
जावा कोड का उपयोग करके एक निश्चित पाठ आकार बदलने के लिए एक पूर्णांक मान प्रदान करता हूं , तो मूल्य को पिक्सेल ( px
) के रूप में व्याख्या किया जाता है ।
अब क्या किसी को पता है कि इसे कैसे सौंपा जाए sp
?
जवाबों:
http://developer.android.com/reference/android/widget/TextView.html#setTextSize%28int,%20float%29
उदाहरण:
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 65);
textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.my_text_size_in_sp));
अपने पाठ का आकार प्राप्त करना इस तरह से पहले से ही एसपी को पीएक्स में परिवर्तित कर देगा, स्क्रीन घनत्व और पाठ स्केल कारक दोनों को ध्यान में रखेगा।
आप किसी DisplayMetrics
ऑब्जेक्ट को scaledDensity
विशेषता के साथ पिक्सेल और स्केल किए गए पिक्सेल के बीच कनवर्ट करने में मदद करने के लिए उपयोग कर सकते हैं ।
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
pixelSize = (int)scaledPixelSize * dm.scaledDensity;
may be adjusted in smaller increments at runtime based on a user preference for the font size
है कि फ़ॉन्ट आकार को ध्यान में रखा जाएगा।
क्लीनर और अधिक पुन: प्रयोज्य दृष्टिकोण है
निर्देशिका के dimens.xml
अंदर फ़ाइल में पाठ का आकार परिभाषित करें res/values/
:
</resources>
<dimen name="text_medium">14sp</dimen>
</resources>
और फिर इसे लागू करें TextView
:
textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, context.getResources().getDimension(R.dimen.text_medium));
के स्रोत कोड के आधार पर setTextSize
:
public void setTextSize(int unit, float size) {
Context c = getContext();
Resources r;
if (c == null)
r = Resources.getSystem();
else
r = c.getResources();
setRawTextSize(TypedValue.applyDimension(
unit, size, r.getDisplayMetrics()));
}
मैं पिक्सल के लिए किसी भी तनाव को शांत करने के लिए इस फ़ंक्शन का निर्माण करता हूं:
int getPixels(int unit, float size) {
DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();
return (int)TypedValue.applyDimension(unit, size, metrics);
}
कहाँ इकाई की तरह कुछ है TypedValue.COMPLEX_UNIT_SP
।
डिफ़ॉल्ट रूप से setTextSize, बिना इकाइयों के सपा में काम करते हैं (स्केल पिक्सेल)
public void setTextSize (float size)
Added in API level 1
Set the default text size to the given value, interpreted as "scaled pixel" units. This
size is adjusted based on the current density and user font size preference.
धन्यवाद @ जॉन लीही और @ पेटरएच:
desiredSp = getResources().getDimension(R.dimen.desired_sp);
density = getResources().getDisplayMetrics().density;
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, desiredSp / density);
बात यह है कि यदि आप अपने dimen.xml में R.dimen.desired_sp से 25 को परिभाषित करते हैं
जब स्वीकृत उत्तर काम नहीं करता है (उदाहरण के लिए जब पेंट से निपटने के लिए) तो आप उपयोग कर सकते हैं:
float spTextSize = 12;
float textSize = spTextSize * getResources().getDisplayMetrics().scaledDensity;
textPaint.setTextSize(textSize);
semeTextView.setTextSize(TypedValue.COMPLEX_UNIT_PX,
context.getResources().getDimension(R.dimen.text_size_in_dp))
COMPLEX_UNIT_PX
हैं तो आपको घनत्व को विभाजित करने की आवश्यकता होती है।
यह कन्वर्ट पीएक्स से एसपी प्रारूप के लिए कोड है । 100% काम करता है
view.setTextSize(TypedValue.COMPLEX_UNIT_PX, 24);
सभी समाधानों की कोशिश करने के बाद और कोई भी स्वीकार्य परिणाम नहीं दे रहा है (हो सकता है क्योंकि मैं डिफ़ॉल्ट रूप से बहुत बड़े फोंट वाले डिवाइस पर काम कर रहा था), मेरे लिए निम्न काम किया गया (COMPLEX_UNIT_DIP = डिवाइस इंडिपेंडेंट पिक्सल):
textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14);
Api स्तर 1 से, आप public void setTextSize (float size)
विधि का उपयोग कर सकते हैं ।
प्रलेखन से:
"स्केल्ड पिक्सेल" इकाइयों के रूप में व्याख्या की गई मान के लिए डिफ़ॉल्ट पाठ आकार सेट करें। यह आकार वर्तमान घनत्व और उपयोगकर्ता फ़ॉन्ट आकार वरीयता के आधार पर समायोजित किया गया है।
पैरामीटर: आकार -> फ्लोट: स्केल्ड पिक्सेल आकार।
तो आप सरल कर सकते हैं:
textView.setTextSize(12); // your size in sp