2013-11-27 5 views
6

के अंदर लिंक ढूंढने और सेट करने के लिए लिंकिफ़ का उपयोग करते समय टेक्स्टव्यू के लिंक पर क्लिक संभाल लें मेरे पास टेक्स्ट से भरा टेक्स्टव्यू है जो मुझे सर्वर से मिलता है। मैं Linkify का उपयोग कर सभी लिंक खोज को संभालने के लिए और एक URLSpan सेट करने के लिए उपयोग कर रहा हूं जहां इसकी ऐडलिंक्स विधि के दौरान आवश्यक है।टेक्स्ट

समस्या यह है कि एक लिंक पर क्लिक करते समय डिफ़ॉल्ट व्यवहार इसे ब्राउज़र में खोल रहा है, जो मैं चाहता हूं उसे क्लिक किया गया लिंक प्राप्त करना और इसे स्वयं संभालना है।

मैं जो मुझे एक "onclick" या कुछ और निर्धारित करने की अनुमति Linkify का कोई भी तरीका नहीं दिख रहा है ... आपकी मदद :) के लिए

धन्यवाद

उत्तर

10

ठीक है इसलिए मैं अंत में टेक्स्टव्यू के लिंक पर अपना "ऑनक्लिक लिस्टर" सेट करने में कामयाब रहा। मेरे समाधान अपने प्रोजेक्ट के लिए Linkify कॉपी करने के लिए किया गया था, यह नाम CustomLinkify और सिर्फ अपनी applyLink पद्धति को बदलने:

से:

private static final void applyLink(String url, int start, int end, Spannable text) 
{ 
    URLSpan span = new URLSpan(url); 

    text.setSpan(span, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
} 

करने के लिए:

private static final void applyLink(final String url, int start, int end, Spannable text) 
{ 
    URLSpan span = new URLSpan(url) 
    { 
     @Override 
     public void onClick(View widget) 
     { 
      _onLinkClickListener.onLinkClicked(url); 
     } 
    }; 

    text.setSpan(span, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
} 

कहाँ _onLinkClickListener एक नया क्षेत्र है, नए CustomLinkify का उपयोग करने से पहले मेरे द्वारा सेट करें।

मुझे पता है कि यह एक बहुत ही सुरुचिपूर्ण समाधान नहीं है और मैंने मूल लिंकिफ़ी के माध्यम से श्रोता को अनुमति देने के लिए Google को पसंद किया है, लेकिन मेरे लिए, यह मेरे Spannable तर्कों (जैसा कि अन्य संबंधित प्रश्नों में सुझाया गया है) को लागू करने से बेहतर है।

मुझे Linkify कोड पर भरोसा है और मुझे लगता है कि मैं समय-समय पर जांच करूँगा यह देखने के लिए कि क्या इसमें कोई बदलाव आया है, यदि हां, तो मैं निश्चित रूप से CustomLinkify परिवर्तनों के साथ अपडेट करूंगा।

आशा है कि यह किसी की मदद करेगा।

+0

हाय, समाधान के लिए धन्यवाद मैंने अपनी परियोजना में Linkify.java का मुकाबला करने की कोशिश की लेकिन लगता है कि यह libcore.util.EmptyArray और com.android.i18n जैसे कुछ बाहरी पुस्तकालयों का उपयोग कर रहा है जो मेरे प्रोजेक्ट में आयात नहीं किए जा सकते ।क्या आप अधिक जानकारी पोस्ट कर सकते हैं कि आप इसे कैसे काम करने में कामयाब रहे। धन्यवाद। – user465125

-4

शायद तुम एक WebView बजाय एक TextView का उपयोग करना चाहिए ?

+0

मुझे नहीं लगता कि लिंक के साथ टेक्स्ट प्रदर्शित करने के लिए वेबव्यू का उपयोग करना एक समाधान है। लेकिन फिर भी धन्यवाद। – Shirane85

+1

लेकिन वेबव्यू के साथ आप अपने क्लिक स्वयं को संभाल सकते हैं। बीटीडब्लू: एक वर्कअराउंड डाउनवॉटिंग हास्यास्पद है। यदि आप खराब उत्तरों के बजाय वर्कअराउंड को डाउनवॉर्टर करते हैं तो आपको सैककोवरफ्लो पर किसी से भी कोई जवाब नहीं मिलेगा। शायद आपको फिर से पढ़ना होगा कि कैसे डाउनवॉटिंग काम करता है: http://stackoverflow.com/help/privileges/vote-down – kirsche40

+0

@ kirsche40 डाउनवॉटिंग केवल 125 प्रतिष्ठा के बाद उपलब्ध है, उनके पास केवल 51. – hichris123

2

मुझे ऐप में कस्टम स्पैन करने योग्य तर्क लागू करने के लिए भी कठिन लगता है, और इसके लिए एक लाइब्रेरी बनाना समाप्त होता है। Textoo देखें।

TextView myTextView = Textoo 
    .config((TextView) findViewById(R.id.my_text_view)) 
    .linkifyEmailAddresses() 
    .linkifyMapAddresses() 
    .linkifyPhoneNumbers() 
    .linkifyWebUrls() // or just .linkifyAll() 
    .linkify(patternSettings, "internal://settings/") 
    .linkify(patternGoogle, "http://www.google.ie/search2?q=", null, transformFilter) 
    .linkify(patternGoogle, "http://www.google.ie/search3?q=", matchFilter, transformFilter) 
    .addLinksHandler(new LinksHandler() { 
     @Override 
     public boolean onClick(View view, String url) { 
      if ("internal://settings/location".equals(url)) { 
       Intent locSettings = new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
       startActivity(locSettings); 
       return true; 
      } else { 
       return false; 
      } 
     } 
    }) 
    .apply(); 

बस साझा करते हैं और आशा है कि किसी को यह उपयोगी मिल जाएगा करने के लिए:

Textoo साथ

, इस तरह प्राप्त किया जा सकता है।