2015-04-02 14 views
8

enter image description hereएक स्ट्रिंग क्लिक करने योग्य बनाने, एक TextView

मैं स्ट्रिंग "इस लिंक" बनाना चाहते में रेखांकित रेखांकित और क्लिक करने योग्य है, लेकिन मुझे लगता है कि कैसे प्राप्त करने के लिए पता नहीं है।

एक्सएमएल फ़ाइल:

<string name="submitText">Before you submit, please check out &lt;u>this link&lt;/u></string> 

मेरी टुकड़ा में:

tvSubmit.setText(Html.fromHtml(getString(R.string.submitText))); 

मैं पूरी स्ट्रिंग क्लिक करने योग्य, केवल रेखांकित अनुभाग होने के लिए नहीं करना चाहती। मैं क्षैतिज LinearLayout का उपयोग 2 कोशिकाओं के साथ नहीं कर सकता, क्योंकि छोटे उपकरणों पर स्ट्रिंग का निरंतर दिखना नहीं होगा, इसे 2 कोशिकाओं में विभाजित किया जाएगा।

क्या है मैंने कोशिश की:

tvSubmit.setMovementMethod(LinkMovementMethod.getInstance()); 
Spannable sp = (Spannable) tvSubmit.getText(); 
ClickableSpan click = new ClickableSpan() { 
    @Override 
    public void onClick(View widget) { 
     showLink(); 
    } 
}; 
sp.setSpan(click, 0, sp.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 

कोड ऊपर बना देता है पूरी स्ट्रिंग को रेखांकित किया है और यह भी पाठ का रंग हल्के नीले रंग में बदल जाता है।

+0

आप 'HTML.fromHTML' का उपयोग कर सकते हैं और अपनी स्ट्रिंग में' this link 'डाल सकते हैं। –

उत्तर

6

समस्या यह है कि आप पूरी स्ट्रिंग (sp.setSpan(click, 0, sp.length()) करने के लिए अवधि की स्थापना कर रहे हैं। ठीक करने के लिए आपको केवल this link पर क्लिक करने योग्य अवधि सेट करनी होगी। अपनी गतिविधि

String thisLink = getString(R.string.thisLink); 
String yourString = getString(R.string.submitText, thisLink); 
SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(yourString); 
spannableStringBuilder.setSpan(click, 
       startIndex, endIndex, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 

जहां STARTINDEX और ENDINDEX yourString में thisLink के सूचकांक हैं

<string name="submitText">Before you submit, please check out %1$s</string> 
<string name="this_link">this link</string> 

: मैं एक ही बात इस तरह से किया था। मैंने दो तारों को अलग किया क्योंकि इंडेक्स को देखना आसान था, खासकर यदि आपको अनुवादों से निपटना है। StartIndex की गणना करने के लिए आप yourString.indexOf(thisLink) का उपयोग कर सकते हैं, और एंड इंडेक्स startIndex + the length of thisLink है। मैं तुम्हें करने के लिए साधारण चेक, (नकारात्मक अनुक्रमित, और बाकी सब कुछ है कि एक IndexOutBoundException कारण बन सकता है)

-1

आप नीचे दिए गए कोड के साथ की कोशिश कर सकते ..

String str = "Before you submit, please check out this link"; 
tvSubmit.setMovementMethod(LinkMovementMethod.getInstance()); 
tvSubmit.setText(setClickablePart(str), BufferType.SPANNABLE); 

विधि

नीचे
private SpannableStringBuilder setClickablePart(String str) 
    { 
     SpannableStringBuilder m_spannableStringBuilder = new SpannableStringBuilder(str); 

     int m_index = str.indexOf("this"); 

     final String clickString = str.substring(m_index, str.length()); 
     m_spannableStringBuilder.setSpan(new ClickableSpan() 
     { 
      @Override 
      public void onClick(View widget) 
      { 
       Toast.makeText(MainActivity.this, clickString, Toast.LENGTH_SHORT).show(); 
      } 
     }, m_index, str.length(), 0); 

     return m_spannableStringBuilder; 
    } 
+0

इसका कोई प्रभाव नहीं है, क्योंकि मूल स्ट्रिंग में वास्तव में यूआरएल नहीं है ... प्रश्न को ध्यान से पढ़ें। – 2Dee

+0

कृपया संशोधित उत्तर की जांच करें। –

2

आप अपना strings.xml में परिभाषित कर सकते हैं साथ TextView में घटना क्लिक से निपटने के लिए

<string name="submitText">Before you submit, please check out <a href="actual url">this link</a> 
1
<TextView 
     android:id="@+id/tvSubmit" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:[email protected]/submitText //link the content of web 
     android:textColorLink="#576586" //change the color of the link 
     android:textColor="#555555" /> 

गतिविधिमें// नमूना

String webLinkText = <a href="https://prativas.files.wordpress.com/2013/05/screenshot-mozilla-firefox-private-browsing.png"><img src="https://prativas.files.wordpress.com/2013/05/screenshot-mozilla-firefox-private-browsing.png" alt="Screenshot-Mozilla Firefox (Private Browsing)" width="293" height="254" class="alignnone size-full wp-image-291" /></a> 
tvSubmit = (TextView) findViewById(R.id.tvSubmit); 
tvSubmit.setText(Html.fromHtml(webLinkText))); 

जांच यहाँ for more detailed answer

0
sp.setSpan(click, 0, sp.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 

परिवर्तन मान 0 छोड़ देंगे: स्थिति के साथ साथ पाठ में लिंक, उदाहरण के परिवर्तन मूल्य शुरू: 10 अगर आप सेट 0 यह सभी पाठ हाइपरलिंक करेगा।

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