TextView - पाठ आकार को प्रोग्रामेटिक रूप से सेट करने से काम नहीं लगता है


140

मैं 2 इम्यूलेटर (2.2 और 3.0) पर परीक्षण, ग्रहण इंडिगो का उपयोग कर रहा हूं।

नीचे दिए गए कोड से पता चलता है कि मैं अब क्या परीक्षण कर रहा हूं, हालांकि एमुलेटर को चलाने की कोशिश करते समय पाठ का आकार स्क्रीन पर कुछ भी नहीं दिखाता है (यदि मैं पाठ का आकार बताता हूं तो पाठ लाल रंग के साथ दिखाई देता है)। मैंने सोचा था कि किसी भी तरह से कोड का पुनर्निर्माण नहीं किया गया था, लेकिन मैंने नीले रंग की पृष्ठभूमि को जोड़ने के लिए कोड की लाइन जोड़ी और यह काम किया। मैंने अभी भी कोई सफलता नहीं मिलने के साथ पाठ सेट करने के बाद पाठ का आकार निर्धारित करने की कोशिश की है। कोड नीचे है। आपकी सहायताके लिए धन्यवाद! (अस्वीकरण) - मैं xml से दूर रहने की कोशिश कर रहा हूं। जा रहा है कि मैं पहले से ही जावा पता है कि मैं उस पर निर्भर नहीं करना चाहता हूँ।

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.widget.TextView;

public class TestAndroidvs2Activity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    TextView text = new TextView(this);
    text.setTextColor(Color.RED);
    text.setTextSize(2);    
    text.setBackgroundColor(Color.BLUE);
    text.setText("Hello Android");


    setContentView(text);
  }
}

जवाबों:


19

पाठ का आकार 2 व्यावहारिक रूप से अदृश्य होगा। इसे कम से कम 14 के साथ आज़माएं। BTW, xml का उपयोग करने के बहुत सारे फायदे हैं और यह आपके जीवन को आसान बना देगा, जब आपको 'हैलो वर्ल्ड' की तुलना में अधिक जटिल कुछ भी करने की आवश्यकता होगी।


मैं इसे 14 के साथ आज़माऊंगा। जैसा कि मैंने पहली पोस्ट में कहा था - भले ही 2 बहुत छोटा हो, कि मेरी स्क्रीन को खाली नहीं करना चाहिए? मुझे लगता है कि मैं इसे एक पैमाने के रूप में पढ़ रहा था, जो पहले से ही पाठ के बजाय केवल आकार सेट करने के लिए था। - मैं देखूंगा लेकिन मैं फिर भी पूछूंगा - डिफ़ॉल्ट आकार क्या है? कोई बात नहीं धन्यवाद।
cspam

btw - हाँ मुझे एहसास है कि xml के अपने फायदे हो सकते हैं लेकिन मुझे इसके साथ शून्य अनुभव है। हाँ, मुझे पता है कि शायद यह सीखना आसान है। जैसा कि मैं पहले से ही जावा से परिचित हूं, मैंने अभी सोचा था कि जितना संभव हो उतने वर्गों से परिचित होना वास्तव में उपयोगी होगा। ऐसा लगता है कि XML के प्रकार का उपयोग करने से आप से बहुत कुछ छुपाता है।
cspam 16

यह इसे छिपाता नहीं है - यह समान मापदंडों वाला एक ही वर्ग है। दोनों के बीच अनुवाद करने में सक्षम होने के लिए कुछ समय लेता है, लेकिन यह वास्तव में काफी कुशल है। एक बोनस के रूप में, यदि आप एक्सएमएल में विचारों को परिभाषित करते हैं, तो सिस्टम आपके कोड को बदलने की आवश्यकता के बिना विभिन्न स्क्रीन आकार, घनत्व और झुकाव का ख्याल रखता है, बस लेआउट फाइलें।
निकोले एलेनकोव

क्या आप किसी भी संख्या के आधार पर रन टाइम में लेआउट और ओरिएंटेशन को बदल पाएंगे?
cspam

यह एक बहुत व्यापक प्रश्न है, लेकिन, संक्षेप में, हाँ। यहां तक ​​कि अगर आप XML में अपने यूआई को परिभाषित करते हैं तो भी आप रन समय पर विचार जोड़ सकते हैं / हटा सकते हैं। आप डिफ़ॉल्ट व्यवहार को भी ओवरराइड कर सकते हैं और ओरिएंटेशन में बदलाव कर सकते हैं।
निकोले एलेनकोव

535

विधि TextView.setTextSize(int unit , float size);दो पैरामीटर लेता है।

इसे इस्तेमाल करे :

text.setTextSize(TypedValue.COMPLEX_UNIT_SP,14);

यह और यह देखें ।

अद्यतन: अब " " इकाइयों में स्वचालित रूपsetTextSize(float size) से पाठ का आकार निर्धारित करेगा । मैन्युअल रूप से COMPLEX_UNIT_SP का उल्लेख करने की आवश्यकता नहीं है। प्रलेखन का संदर्भ लें ।scaled pixel


36
यह सही जवाब है। और अधिक विशेष रूप से: float myTextSize = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 18F, context.getResources().getDisplayMetrics());
ब्रिल पप्पिन

2
आपका बहुत बहुत धन्यवाद!
दिमित्रीकुननिकॉफ

72

यह मेरे लिए मुद्दा तय किया। मुझे सभी उपकरणों में एक समान फ़ॉन्ट आकार मिला।

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

क्या R.dimen.font एक समान संख्या है या आपके पास विभिन्न उपकरणों के लिए अलग-अलग आकार हैं?
the_Martian

मेरे मामले में मैंने इन फ़ोल्डरों में फाइल dimen.xml में फ़ॉन्ट की घोषणा की: मान, मूल्य- sw600dp, विशिष्ट मूल्यों के साथ मान-sw720dp।
विकास

यह अजीब है कि TextView.setTextSize (R.dimen.text_size_max) नामक पाठ के बाद गायब हो गया, लेकिन अपनी पद्धति का उपयोग करें, यह काम करता है।
li2

मेरे लिये कार्य करता है। धन्यवाद!
अपूर्वा ठक्कर

24

वर्तमान में, setTextSize(float size)विधि अच्छी तरह से काम करेगी इसलिए हमें पाठ आकार बदलने के लिए किसी अन्य विधि का उपयोग करने की आवश्यकता नहीं है

android.widget.TextView.java स्रोत कोड

/**
 * 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.
 *
 * <p>Note: if this TextView has the auto-size feature enabled than this function is no-op.
 *
 * @param size The scaled pixel size.
 *
 * @attr ref android.R.styleable#TextView_textSize
 */
@android.view.RemotableViewMethod
public void setTextSize(float size) {
    setTextSize(TypedValue.COMPLEX_UNIT_SP, size);
}

उदाहरण का उपयोग कर

textView.setTextSize(20); // set your text size = 20sp


12

कृपया कोड में पाठ का आकार निर्धारित करने के बारे में अधिक जानकारी के लिए इस लिंक को देखें । मूल रूप से यह कहता है:

सार्वजनिक शून्य setTextSize (इंट यूनिट, फ्लोट आकार)

चूंकि: API स्तर 1 किसी दिए गए इकाई और मान के लिए डिफ़ॉल्ट पाठ आकार सेट करें। संभावित आयाम इकाइयों के लिए टाइप करेंवैल्यू देखें । संबंधित XML विशेषताएँ

Android: textSize Parameters

इकाई वांछित आयाम इकाई।
आकार दी गई इकाइयों में वांछित आकार।


1
मैंने अपने कोड में एक्लिप्स में डबल चेक किया और इंटेलीजेंस के अनुसार मेरे पास वास्तव में सेटटैक्ससाइज़, सेटटेक्स्टाइज़ (फ्लोट आकार), सेटटेक्लाइज़ (इंट यूनिट, फ्लोट आकार) के लिए 2 विकल्प हैं। आपके द्वारा जोड़ा गया दस्तावेज़ इसकी पुष्टि करता है।
cspam 15

सही - क्या आपने इसकी कोशिश की? इसके अलावा, निकोले कहते हैं कि 2 देखने के लिए छोटे हो जाएगा, साथ ही बढ़ती कोशिश करें।
जैक

हां, लेकिन समस्या यह है कि जब मैं इसे अभी जिस तरह से करने की कोशिश करता हूं, तो पाठ भी दिखाई नहीं देता है। यह सिर्फ एक खाली स्क्रीन है। भले ही 2 ध्यान देने योग्य नहीं था कि स्क्रीन खाली क्यों है?
cspam 15

यह खाली नहीं है। यदि आप वास्तव में करीब दिखते हैं, तो आप छोटे लाल पिक्सेल देख सकते हैं :)। देखने के लिए धीरे-धीरे आकार बढ़ाएं।
निकोले एलेनकोव

और वैसे, setTextSize (float) setTextSize (COMPLEX_UNIT_SP, float) के बराबर है।
निकोले एलेनकोव

10

मेरे मामले में इस विधि का इस्तेमाल किया :

public static float pxFromDp(float dp, Context mContext) {
    return dp * mContext.getResources().getDisplayMetrics().density;
}

यहां सेट TextView के TextSize प्रोग्राम के :

textView.setTextSize(pxFromDp(18, YourActivity.this));

मज़ा लें:)


हाय @ ध्रुव रावल, मैं अपनी परियोजना में फ़ॉन्ट आकार को समायोजित करने में सक्षम होने के लिए चुन रहा हूं, यदि यह मान 18 किसी भी स्क्रीन घनत्व के लिए मान्य है, या मुझे प्रत्येक स्क्रीन के लिए एक आयाम बनाना चाहिए?
आर्मंडो मार्किस सोब्रिन्हो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.