2012-05-14 13 views
11

मैं अलग-अलग दिखने, रेखांकित, स्ट्राइकथ्रू और इस तरह के स्पैन बनाने के लिए टेक्स्ट व्यू में स्पैन करने योग्य का उपयोग कर सकता हूं। लाइन रैपिंग व्यवहार को बदलने के लिए मैं वही कैसे कर सकता हूं? विशेष रूप से, मैं नहीं चाहता कि एक ईमेल पता मध्य में लपेटें, मैं चाहता हूं कि यह एक शब्द की तरह कार्य करे।लाइन रैप व्यवहार बदलना

मैंने WrapTogetherSpan की कोशिश की, लेकिन मैं इसे काम नहीं कर सका। ऐसा लगता है कि यह केवल डायनामिक लयआउट द्वारा उपयोग किया जाता है, और मैं टेक्स्टव्यू को डायनामिक लयआउट का उपयोग करने के लिए मजबूर नहीं कर सका।

WrapTogetherSpan TOGETHER_SPAN = new WrapTogetherSpan() {}; 
String collectedString = getString(R.string.email_sentence, userEmail); 
int emailOffset = collectedString.indexOf(userEmail); 
Spannable emailSpannable = Spannable.Factory.getInstance() 
    .newSpannable(collectedString); 
emailSpannable.setSpan(TOGETHER_SPAN, emailOffset, 
    emailOffset + userEmail.length(), 
    Spanned.SPAN_INCLUSIVE_EXCLUSIVE); 
textView.setText(emailSpannable) 

उत्तर

0

आप अपनी XML को android:singleLine="true" जोड़ने की कोशिश की है:

<TextView 
    android:id="@+id/merchant_email_field" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:textSize="@dimen/account_setting_email" 
    android:gravity="center" 
    android:bufferType="spannable" 
    android:maxLines="2" 
    android:ellipsize="end" 
    /> 

मैं कैसे spannable सेट कर रहा हूं?

+0

नहीं देखें, क्योंकि मैं दो लाइनों को चाहते हैं। मैं सिर्फ एक ईमेल पते को एक शब्द के रूप में लपेटना चाहता हूं। – pforhan

+0

क्षमाप्रार्थी, मुझे पहले यह समझ में नहीं आया। अब बहुत अधिक समझ में आता है कि आप इसे एक स्पैन करने योग्य के साथ क्यों करने की कोशिश कर रहे थे। :) – Barak

5

पता नहीं है कि आपको इसका जवाब मिल गया है, लेकिन आप मदद करने के लिए यूनिकोड का उपयोग कर सकते हैं।

वहाँ

एक गैर तोड़ने अंतरिक्ष चरित्र है, तो आप सभी रिक्त स्थान आपको एक उदाहरण

String text = "Hello World"; 
text.replace(' ', '\u00A0'); 
textView.setText(text); 

द्वारा के लिए इस चरित्र (\ u00A0)

साथ अटूट होना चाहता हूँ की जगह की आवश्यकता होगी जिस तरह से मैंने एक स्पैन समाधान की तलाश की है और एक नहीं मिला, WrapTogetherSpan सिर्फ एक इंटरफ़ेस है इसलिए यह काम नहीं करेगा ...

लेकिन इस विधि के साथ मुझे यकीन है कि आप एक कस्टम अटूट कर सकते हैं यदि आप वान करते हैं तो अवधि टी।

+0

अच्छा, यह रिक्त स्थान के लिए काम करता है। लेकिन प्रश्न में उल्लिखित ईमेल पते के मामले में, यह मदद नहीं करता है। मैं * वहां + यू + एफईएफएफ या यू +2060 जैसे अदृश्य पात्रों को छूने में सक्षम हो सकता हूं, लेकिन यह सिर्फ परेशान है, क्योंकि यह प्रत्येक गुणक के बीच होना चाहिए। – pforhan

1

यदि आप अधिक निम्न स्तर के समाधान को लागू कर रहे हैं (यानी, अपना स्वयं का टेक्स्ट ड्राइंग और लाइन-रैपिंग स्वयं को संभालना), तो BreakIterator देखें। BreakIterator.getLineInstance() फ़ैक्टरी विधि ईमेल पते को एक इकाई के रूप में मानती है।

String text = "My email is [email protected]"; 
BreakIterator boundary = BreakIterator.getLineInstance(); 
boundary.setText(text); 
int start = boundary.first(); 
for (int end = boundary.next(); end != BreakIterator.DONE; end = boundary.next()) { 
    System.out.println(start + " " + text.substring(start, end)); 
    start = end; 
} 

आउटपुट सीमा प्रारंभ सूचकांक दिखाता है जहां लाइन ब्रेक स्वीकार्य होगा।

0 My 
3 email 
9 is 
12 [email protected] 

भी

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