2010-08-04 11 views
12

मैं एक ऐसा प्रतिरूप कुछ इस तरह दिखता है:मैं कैसे निर्धारित करूं कि एंड्रॉइड में टेक्स्ट व्यू में कितना टेक्स्ट फिट होगा?

[TextView 1] [TextView 2] 
[ TextView 2 spill-over ] 

अनिवार्य रूप से, मैं TextView 2 की सामग्री की जरूरत है अगली पंक्ति में रैप करने के लिए है, लेकिन शुरू जहां TextView 1 शुरू होता है। मैं सोच रहा था कि अगर मुझे पता था कि टेक्स्ट व्यू 2 में लाइन से बाहर होने से पहले टेक्स्ट कितना टेक्स्ट फिट होगा, तो मैं बाकी टेक्स्ट ले सकता हूं और इसे पहले दो के नीचे एक और टेक्स्ट व्यू में डाल सकता हूं। तो मुझे यह मापने की ज़रूरत है कि टेक्स्टव्यू में कितना टेक्स्ट फिट होगा (जो मुश्किल हो सकता है क्योंकि जहां तक ​​मैं कह सकता हूं, एंड्रॉइड एक टेक्स्टव्यू में टेक्स्ट को एक अच्छी जगह पर तोड़ने का प्रयास करेगा ताकि वह एक शब्द को तोड़ न सके बीच में अगर इसे टाला जा सकता है) या मुझे इसे बाहर रखने के तरीके पर एक नया विचार चाहिए।

किसी भी मदद की सराहना की जाएगी।

अग्रिम धन्यवाद,

groomsy

+0

यदि यह संभव है, मुझे लगता है कि यह एक बहुत अधिक जटिल है कि इसके लायक हो जाएगा होगा। आप अपने टेक्स्ट व्यू 2 के टेक्स्ट को टेक्स्टव्यू 1 में क्यों जोड़ नहीं सकते? – Falmarri

+1

विभिन्न स्वरूपण। इसके अलावा, टेक्स्ट व्यू 1 कभी-कभी एक छवि दृश्य भी हो सकता है। मैंने वेबव्यू में सब कुछ डालने के बारे में सोचा है, लेकिन मुझे नहीं पता कि मैं 2 लाइनों पर कैसे रुक जाऊंगा। – groomsy

+0

http://stackoverflow.com/questions/7259016/scale-text-in-a-view-to-fit/7259136#7259136 – Ronnie

उत्तर

9

दुर्भाग्यवश, Paint.breakText ने मेरे दो-पंक्ति टेक्स्टव्यू में जैसा देखा था, वही परिणाम ठीक नहीं किया।

रेफरी http://developer.android.com/reference/android/text/Layout.html#getLineEnd(int) Set individual lines of TextView to different width

+0

यह मुझे संबंधित समस्या के साथ सही रास्ते पर जा रहा है। 'GetLineCount' और' getLineStart' के संयोजन ने मेरे लिए चाल बनाई जब कस्टम ट्रिमिंग/टेक्स्टव्यू "इलिप्सिंग"। – loeschg

+0

इसके अलावा, किसी को भी 'getLayout() 'वापसी नल के साथ कोई समस्या होने के लिए, इस प्रश्न की जांच करें। http://stackoverflow.com/questions/19157650/how-to-get-height-of-view-inside-adapter-for-creating-sized-bitmap – loeschg

+0

@Ioeschg 'getlayout()' रिटर्न 'शून्य', लेकिन उपर्युक्त लिंक सहायक नहीं है। क्या आप बता सकते हैं कि क्या गलत हो रहा है? – Ammar

6

आप TextView2 के पाठ का आकार के साथ एक पेंट वस्तु बना सकते हैं और breakText() का उपयोग को मापने के लिए कितने वर्ण अपने TextView2 की चौड़ाई में फिट होगा सकता है।

(यह अपरीक्षित कोड है - कुछ मामूली संशोधनों की आवश्यकता हो सकती)

String textToBeSplit = arbitraryText; // Text you want to split between TextViews 
float textView2Width = somehowGetItsWidth; // TextView2's width 
float myTextSize = textView2.getTextSize(); 

Paint paint = new Paint(); 
paint.setTextSize(myTextSize); // Your text size 
int numChars = paint.breakText(textToBeSplit, true, float textView2Width, null); 

numChars आपको बताता है कि textToBeSplit में कई पात्रों TextView2 की चौड़ाई में फिट होगा, अपने विचारों के बीच यह विभाजित करने के लिए आप सक्षम करने से।

+0

किसी न किसी उदाहरण के लिए धन्यवाद। मैं इस पर काम करूंगा और आपको बता दूंगा कि यह कैसे निकलता है। – groomsy

+0

मेरे लिए काम नहीं करता है। हमेशा शून्य – shantanu

+1

वापस आज़माएं और यह लगभग काम किया। समस्या यह थी कि टेक्स्ट व्यू थोड़ा अलग दृष्टिकोण का उपयोग करता है, खासकर जब इसमें एक से अधिक पंक्ति होती है। गिनती 2-3 अक्षर होगी। एक बेहतर समाधान मिला है जिसे मैं उत्तर – dparnas

2

आपको ऐसा करने के लिए दो TextViews जरूरत नहीं है - (यह करने के लिए पैरामीटर के रूप में 1 उपयोग numberOfLines)

हालांकि, इस

int numChars = textView.getLayout().getLineEnd(1); 

काम किया यह, आपको हमेशा जितना संभव हो उतना विचारों का उपयोग करना चाहिए और आप उसी टेक्स्टव्यू के लिए दो शैलियों के लिए एक स्पैन करने योग्य का उपयोग कर सकते हैं।
साथ उदाहरण के लिए:

TextView tv = (TextView) findViewById(R.id.textview); 
SpannableString text = new SpannableString(myString); 

text.setSpan(new TextAppearanceSpan(getContext(), R.style.myStyle), 0, 5, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
text.setSpan(new TextAppearanceSpan(getContext(), R.style.myNextStyle), 6, 10, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 

tv.setText(text, TextView.BufferType.SPANNABLE); 
संबंधित मुद्दे