2012-03-15 14 views
7

मैं स्क्रीन आकार बदलने के लिए एक तरीका ढूंढ रहा हूं, यह आनुपातिक रूप से टेक्स्ट का आकार बदल देगा। वर्तमान में मैंने Auto Scale TextView Text to Fit within Bounds को आजमाया लेकिन ऐसा लगता है कि यह काम नहीं कर रहा है। लेकिन मुझे यकीन नहीं है कि मैं इसे सही तरीके से करता हूं या नहीं। अब मैं वर्तमान में सेऑटो स्केल टेक्स्ट साइज

AutoResizeTextView test = new AutoResizeTextView(this); 
test=(AutoResizeTextView)findViewById(R.id.test456); 
test.resizeText(); // I call this to resize.. am I right? 

एक्सएमएल

<com.mypackage.AutoResizeTextView 
android:id="@+id/test456" 
android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_weight="1" /> 

उत्तर

34

फोन कर रहा हूँ आप TextView कह सकते हैं के बाद से वर्ग TextView फैली हुई है, AutoResizeTextView test कॉल करने के लिए की जरूरत नहीं है। मुझे नहीं लगता कि आपको resizeText() पर कॉल करने की आवश्यकता क्यों होगी।

किसी भी तरह से, यहां एक कस्टम क्लास है जिसे मैं ऑटो री-साइज टेक्स्ट में उपयोग करना पसंद करता हूं।

public class AutoFitTextView extends TextView { 

public AutoFitTextView(Context context) { 
    super(context); 
    init(); 
} 

public AutoFitTextView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    init(); 
} 

private void init() { 

    maxTextSize = this.getTextSize(); 
    if (maxTextSize < 35) { 
     maxTextSize = 30; 
    } 
    minTextSize = 20; 
} 

private void refitText(String text, int textWidth) { 
    if (textWidth > 0) { 
     int availableWidth = textWidth - this.getPaddingLeft() 
       - this.getPaddingRight(); 
     float trySize = maxTextSize; 

     this.setTextSize(TypedValue.COMPLEX_UNIT_PX, trySize); 
     while ((trySize > minTextSize) 
       && (this.getPaint().measureText(text) > availableWidth)) { 
      trySize -= 1; 
      if (trySize <= minTextSize) { 
       trySize = minTextSize; 
       break; 
      } 
      this.setTextSize(TypedValue.COMPLEX_UNIT_PX, trySize); 
     } 
     this.setTextSize(TypedValue.COMPLEX_UNIT_PX, trySize); 
    } 
} 

@Override 
protected void onTextChanged(final CharSequence text, final int start, 
     final int before, final int after) { 
    refitText(text.toString(), this.getWidth()); 
} 

@Override 
protected void onSizeChanged(int w, int h, int oldw, int oldh) { 
    if (w != oldw) { 
     refitText(this.getText().toString(), w); 
    } 
} 

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
    int parentWidth = MeasureSpec.getSize(widthMeasureSpec); 
    refitText(this.getText().toString(), parentWidth); 
} 

public float getMinTextSize() { 
    return minTextSize; 
} 

public void setMinTextSize(int minTextSize) { 
    this.minTextSize = minTextSize; 
} 

public float getMaxTextSize() { 
    return maxTextSize; 
} 

public void setMaxTextSize(int minTextSize) { 
    this.maxTextSize = minTextSize; 
} 

private float minTextSize; 
private float maxTextSize; 

} 
+0

मैं किसी अन्य वर्ग के माध्यम से फोन कर रहा हूँ तो मैं फोन करने के लिए टीटी मैं सही हूँ की ज़रूरत है? क्या मुझे यह चाहिए कि लेआउट xml n को कस्टम क्लास का उपयोग हेडर के रूप में करना है? – user1235085

+1

बीटीडब्ल्यू आपके कोड मेरे लिए पूरी तरह से काम करता है धन्यवाद :) – user1235085

+0

ऐसा लगता है जैसे आपको यह मिला, लेकिन स्पष्ट होना; आप 'टेक्स्ट व्यू' के स्थान पर अपने एक्सएमएल में कस्टम क्लास जोड़ते हैं, फिर अपने कोड में आप इसे सामान्य 'टेक्स्ट व्यू' की तरह संदर्भित करते हैं। – adneal

2

मैं इसका उपयोग स्क्रीन की चौड़ाई पर आनुपातिक रूप से करता हूं।

DisplayMetrics displaymetrics = new DisplayMetrics(); 
     getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); 
     width_screen=displaymetrics.widthPixels; 
Mytext.setTextSize(TypedValue.COMPLEX_UNIT_PX, (width_screen/CONST)); 

कॉन्स्ट एक संख्या है जिसका उपयोग मैं आयाम में फ़ॉन्ट को स्केल करने के लिए करता हूं। यह मेरी आवश्यकताओं के लिए काम करता है।

1

अच्छी खबर! Google ने एंड्रॉइड ओ में ऑटोसाइजिंग टेक्स्टव्यू समर्थन प्रस्तुत किया। इसे समर्थन पुस्तकालयों में भी शामिल किया जाएगा।

https://developer.android.com/preview/features/autosizing-textview.html

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