TextView पर क्लिक करने योग्य लिंक बनाने के लिए कैसे?


1003

मेरे पास निम्नलिखित TextView परिभाषित है:

<TextView android:layout_width="wrap_content"
    android:layout_height="wrap_content" android:text="@string/txtCredits"
    android:autoLink="web" android:id="@+id/infoTxtCredits"
    android:layout_centerInParent="true"
    android:linksClickable="true"></TextView>

जहां @string/txtCreditsएक स्ट्रिंग संसाधन है जिसमें सम्‍मिलित है <a href="some site">Link text</a>

एंड्रॉइड TextView में लिंक को हाइलाइट कर रहा है, लेकिन वे क्लिक का जवाब नहीं देते हैं। क्या कोई मुझे बता सकता है कि मैं क्या गलत कर रहा हूं? क्या मुझे अपनी गतिविधि में टेक्स्टव्यू के लिए ऑनक्लिस्टिकर सेट करना होगा, क्योंकि यह कुछ सरल है?

ऐसा लगता है कि यह मेरे स्ट्रिंग संसाधन को परिभाषित करने के तरीके के साथ करना है। यह काम नहीं करता:

<string name="txtCredits"><a href="http://www.google.com">Google</a></string>

लेकिन यह करता है:

<string name="txtCredits">www.google.com</string>

जो एक bummer है क्योंकि मैं पूर्ण URL दिखाने के बजाय एक पाठ लिंक दिखाऊंगा।


67
android: autoLink = "web" यह xml में जोड़ने के लिए मुख्य लाइन है और यह आकर्षण की तरह काम करता है। धन्यवाद @
रीचर्ड

1
<string name = "txtCredits"> <a href=" google.com"> www.google.com </a> </ string > उपरोक्त स्ट्रींग का उपयोग करें और यह काम करता है। यह पता चला है कि href में और एंकर टैग में स्ट्रिंग एक जैसी होनी चाहिए और .com या। * काम करने के लिए यह जाँचने की आवश्यकता है कि क्यों
Shaik Khader

<string name = "txtCredits"> कुछ टेक्स्ट यहां <a href=" google.com"> Google </a> </ string > ऊपर स्निपेट के लिए कुछ टेक्स्ट पर क्लिक करें यहां मेरे मामले में काम नहीं करना चाहिए मुझे क्या करना चाहिए?
अजय ताकुर


android:focusable="true"मेरी समस्या हल की
खंग .NT

जवाबों:


1228

एपीआई डेमो में दफन मैं अपनी समस्या का हल पाया:

Link.java:

    // text2 has links specified by putting <a> tags in the string
    // resource.  By default these links will appear but not
    // respond to user input.  To make them active, you need to
    // call setMovementMethod() on the TextView object.

    TextView t2 = (TextView) findViewById(R.id.text2);
    t2.setMovementMethod(LinkMovementMethod.getInstance());

डेमो में जो था, उसे मैच करने के लिए मैंने अपने टेक्स्ट व्यू पर अधिकांश विशेषताओं को हटा दिया।

<TextView
    android:id="@+id/text2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/txtCredits"/>

इससे हल हो गया। उजागर करना और ठीक करना बहुत मुश्किल है।

महत्वपूर्ण : autoLink="web"यदि आप कॉल कर रहे हैं तो निकालना न भूलें setMovementMethod()


19
हो सकता है कि यह सिर्फ मैं ही हो, लेकिन आप कभी एडिट टेक्स्ट के साथ ऐसा क्यों करेंगे?
जस्टिन

1
लक्ष्य प्राप्त करने के लिए केवल setMovementMethod की आवश्यकता होती है।
superarts.org

3
एक कमिटमेंट के रूप में, मैंने OS 4.3 के साथ कुछ सैमसंग गैलेक्सी S3 को देखा है जो क्रैश तब होता है जब "setMovementMethod (LinkMovementMethod.getInstance ())" का उपयोग किया जाता है, इसलिए इसे ध्यान में रखते हुए, मुझे इसे जोड़ने से पहले एक मान्यता बनानी थी
जॉर्ज Aguilar

40
मुझे भी। ध्यान दें कि यदि setMovementMethod () कहा जाता है, तो XML फ़ाइल में ऑटोलिंक = "वेब" को हटाना आवश्यक है, अन्यथा लिंक काम नहीं करेगा। टिप्पणी के लिए धन्यवाद
voghDev

6
बस उदाहरण के लिए अपने xml में "ऑटोलिंक" विशेषता का उपयोग करें: android: autoLink = "web"
कल्पेश

533

मैं केवल उपयोग कर रहा हूं android:autoLink="web"और यह ठीक काम करता है। लिंक पर एक क्लिक ब्राउज़र खोलता है और सही पेज दिखाता है।

एक बात मैं अनुमान लगा सकता हूं कि कुछ अन्य दृश्य लिंक के ऊपर है। कुछ ऐसा जो पारदर्शी है पूरे माता-पिता को भर देता है लेकिन लिंक के ऊपर कुछ भी प्रदर्शित नहीं करता है। इस मामले में क्लिक लिंक के बजाय इस दृश्य पर जाता है।


3
ऊपर अधिक जानकारी जोड़ी गई। क्या ऐसा हो सकता है कि मैं स्ट्रिंग को <string name = "txtCredits"> <a href=" google.com"> Google </a> </ string > के रूप में परिभाषित कर रहा हूं ? ऐसा लगता है कि इसकी अनुमति है लेकिन यह मेरे लिए काम नहीं कर रहा है।
रिचर्ड

6
यदि आप लिंक ऑटो का उपयोग करते हैं तो आपको href भाग की आवश्यकता नहीं है। OS, स्ट्रिंग पार्स को url के लिए ले जाएगा और प्रत्येक url को क्लिक करने योग्य लिंक में बदल देगा। लेकिन इससे google शब्द google.com से लिंक नहीं होगा। यह लिंक के रूप में www.google.com प्रदर्शित करेगा।
Janusz

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

2
Android: ऑटोलिंक फोन नंबर, पते और ई-मेल पते (या उपरोक्त सभी) को जोड़ने के लिए भी बहुत अच्छा काम करता है।
क्लॉउम्यूजिक

54
नहीं यह नहीं है, क्योंकि यह जवाब काम नहीं करता है यदि आप URL से अलग प्रदर्शन पाठ के साथ एक एंकर टैग का उपयोग नहीं करना चाहते हैं
cprcrack

375

इसके साथ कुछ समय बिताने के बाद, मैंने पाया है कि:

  • android:autoLink="web"यदि आपके HTML में पूर्ण लिंक हैं तो काम करता है। निम्नलिखित नीले और क्लिक करने योग्य पर प्रकाश डाला जाएगा:
  • कुछ पाठ <a href="http://www.google.com">http://www.google.com</a>
  • कुछ पाठ http://www.google.com
  • view.setMovementMethod(LinkMovementMethod.getInstance()); निम्नलिखित के साथ काम करेगा (हाइलाइट किया जाएगा और क्लिक करने योग्य होगा):
  • कुछ पाठ <a href="http://www.google.com">http://www.google.com</a>
  • कुछ पाठ http://www.google.com
  • कुछ पाठ <a href="http://www.google.com">Go to Google</a>

ध्यान दें कि तीसरे विकल्प में एक हाइपरलिंक है, लेकिन लिंक का वर्णन (टैग के बीच का हिस्सा) खुद एक लिंक नहीं है। इस तरह के लिंक के साथ काम नहींandroid:autoLink="web" करता है ।

  • android:autoLink="web"अगर एक्सएमएल में सेट ओवरराइड होगा view.setMovementMethod(LinkMovementMethod.getInstance());(यानी, तीसरे तरह के लिंक हाइलाइट किए जाएंगे, लेकिन क्लिक करने योग्य नहीं)।

कहानी का नैतिक उपयोग view.setMovementMethod(LinkMovementMethod.getInstance());आपके कोड में किया जाता है और सुनिश्चित करें कि android:autoLink="web"आपके XML लेआउट में आपके पास नहीं है यदि आप चाहते हैं कि सभी लिंक क्लिक करने योग्य हों।


setMovementMethod दूसरे विकल्प के साथ काम नहीं करता है जिसका आपने उल्लेख किया है google.com .. कोई अद्यतन?
डारपन

16
यह इंगित करने के लिए धन्यवाद कि <a href="http://www.google.com">Go to Google</a>ऑटोलिंक के लिए काम नहीं करेगा। एसओ पर इतने सारे जवाबों के लिए, यह एकमात्र ऐसा है जिसने इसका उल्लेख किया है। धन्यवाद!
cwhsu

यह एक काम करता है। एपीआई 29 पर परीक्षण किया गया।
राइटिक बसु

96

उपरोक्त समाधान मेरे लिए काम नहीं किया, लेकिन निम्नलिखित ने किया (और यह थोड़ा साफ लगता है)।
सबसे पहले, स्ट्रिंग संसाधन में, HTML इकाई एन्कोडिंग का उपयोग करके अपने टैग खोलने वाले शेवरॉन को परिभाषित करें, अर्थात:

&lt;a href="http://www.google.com">Google&lt;/a>

और नहीं:

<a href="http://www.google.com">Google</a>

सामान्य तौर पर, इस तरह से स्ट्रिंग में सभी शेवरॉन को एनकोड करें। BTW, लिंक के साथ शुरू होना चाहिएhttp://

तब (जैसा कि यहाँ सुझाव दिया गया है ) इस विकल्प को अपने TextView पर सेट करें:

 android:linksClickable="true"

अंत में, कोड में, करें:

((TextView) findViewById(R.id.your_text_view)).setMovementMethod(LinkMovementMethod.getInstance());
((TextView) findViewById(R.id.your_text_view)).setText(Html.fromHtml(getResources().getString(R.string.string_with_links)));

यही कारण है, कोई regexes या अन्य मैनुअल हैक की आवश्यकता नहीं है।


7
यह एक HTML पार्सर बनाएगा जो इस कोड को निष्पादित करेगा। इस बात से अवगत रहें कि यदि आप इसका उपयोग किसी सूची आइटम के अंदर या अपने ऐप में अन्य प्रदर्शन महत्वपूर्ण स्थानों पर लिंक बनाने के लिए करते हैं। एक गवाह के निर्माण के दौरान यह मेरे getView के निष्पादन समय को 50% से बढ़ा देता है
Janusz

1
URL में नोट रिक्त स्थान को भी प्रतिस्थापित किया जाना चाहिए%20
निकोलस टायलर

आप <![CDATA[ ... ]]>टैग में अपनी स्ट्रिंग लपेटकर इकाई एन्कोडिंग समस्याओं से बच सकते हैं ।
पॉल लामर्ट्स्मा

1
मेरे लिए काम करता है, धन्यवाद। <![CDATA[...]]>टैग के साथ काम नहीं कर रहा है ।
ricky.tribbia

इसका उत्तर होना चाहिए! मेरे मूल ऐप
अजय कुलकर्णी

68

मैं यह बस इस्तेमाल किया

Linkify.addLinks(TextView, Linkify.ALL);

यहाँ दिए गए लिंक को क्लिक करने योग्य बनाता है


4
यह उत्तर सबसे अच्छा है। हर एंड्रॉइड वर्जन पर काम करता है और हमें टेक्स्ट व्यू में सेट किए गए समय में बस उस तरीके को जोड़ना होगा। बोनस: यह हमें
केरवान

3
वास्तव में सबसे सरल और सबसे अच्छा जवाब। यह एक ही समय में ईमेल / वेब के लिए काम करता है .... धन्यवाद आदमी !!!
इमरान अहमद

1
उपयोग LinkifyCompat आप नए उन्नत सुविधाओं में से कुछ की जरूरत है
Vaiden

अच्छा है, यह बिना <a href...क्लिक करने योग्य बनाता है
पावेल

यह काम के अनुसार सभी "html" टैग भी बनाता है, उदाहरण के लिए <b> ... </ b> इत्यादि
Array

67

यदि आप HTML जैसी लिंक जोड़ना चाहते हैं, तो आपको बस इतना करना होगा:

  • एक संसाधन HTML जैसी स्ट्रिंग जोड़ें:

     <string name="link"><a href="https://www.google.pl/">Google</a></string>
  • अपने दृश्य को NO लिंक-विशिष्ट कॉन्फ़िगरेशन के साथ लेआउट में जोड़ें:

     <TextView
        android:id="@+id/link"
        android:text="@string/link" />`
  • उपयुक्त मूवमेंटमैथोड को प्रोग्राम टेक्स्ट में जोड़ें:

     mLink = (TextView) findViewById(R.id.link);
     if (mLink != null) {
       mLink.setMovementMethod(LinkMovementMethod.getInstance());
     }

बस! और हां, "ऑटोलिंक" और "लिंक्स क्लीकेबल" जैसे विकल्प केवल स्पष्ट लिंक पर काम कर रहे हैं (html टैग में लिपटे नहीं) मेरे लिए भी बहुत भ्रामक है ...


2
+1 तुम सही हो। अपने आप को एक पैटर्न दर्ज करने का विकल्प होना चाहिए ताकि यह मिलान हो। इस तरह यह बहुत गूंगा है।
schlingel

47

मैंने इस लाइन को इसमें जोड़ा TextView: android:autoLink="web"
नीचे एक लेआउट फ़ाइल में उपयोग का एक उदाहरण है।

layout.xml नमूना

    <TextView
        android:id="@+id/txtLostpassword"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:autoLink="email"
        android:gravity="center"
        android:padding="20px"
        android:text="@string/lostpassword"
        android:textAppearance="?android:attr/textAppearanceSmall" />

    <TextView
        android:id="@+id/txtDefaultpassword"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:autoLink="web"
        android:gravity="center"
        android:padding="20px"
        android:text="@string/defaultpassword"
        android:textAppearance="?android:attr/textAppearanceSmall" />

string.xml

<string name="lostpassword">If you lost your password please contact <a href="mailto:support@cleverfinger.com.au?Subject=Lost%20Password" target="_top">support@cleverfinger.com.au</a></string>

<string name="defaultpassword">User Guide <a href="http://www.cleverfinger.com.au/user-guide/">http://www.cleverfinger.com.au/user-guide/</a></string>

36

निम्नलिखित को किसी ऐसे व्यक्ति के लिए काम करना चाहिए जो एंड्रॉइड ऐप के भीतर पाठ और हाइपरलिंक के संयोजन की तलाश कर रहा है।

इन string.xml:

<string name="applink">Looking for Digital Visiting card? 
<a href="https://play.google.com/store/apps/details?id=com.themarkwebs.govcard">Get it here</a>
</string>

अब आप इसे stringकिसी भी Viewतरह से उपयोग कर सकते हैं :

<TextView
    android:id="@+id/getapp"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:gravity="center"
    android:textColor="@color/main_color_grey_600"
    android:textSize="15sp"
    android:text="@string/applink"/>

अब, अपनी गतिविधि या परिश्रम में, निम्नलिखित कार्य करें:

TextView getapp =(TextView) findViewById(R.id.getapp);
getapp.setMovementMethod(LinkMovementMethod.getInstance());

अब तक, आपको इस दृष्टिकोण को सेट android:autoLink="web"या android:linksClickable="true"उपयोग करने की आवश्यकता नहीं है ।

मुझे आशा है कि आपको यह मददगार लगेगा।


यह अच्छी तरह से काम करता है, लेकिन जब यो खोले गए वेब से वापस दबाते हैं, तो केवल ब्राउज़र बंद करें, लेकिन ऐप पर वापस न आएं।
जचुमबीलेचाओ अनटो मंटेकिला

27

उम्मीद है इससे आपको मदद मिलेगी;

String value = "<html>Visit my blog <a href=\"http://www.maxartists.com\">mysite</a> View <a href=\"sherif-activity://myactivity?author=sherif&nick=king\">myactivity</a> callback</html>";
    TextView text = (TextView) findViewById(R.id.text);


    text.setText(Html.fromHtml(value));
    text.setMovementMethod(LinkMovementMethod.getInstance());

3
यह बहुत अच्छा काम करता है। यह भी सुनिश्चित करें कि आप android:autoLink=?अपने से हटा दें TextView
सल्फाई

यही मेरे लिए आखिरकार काम आया। मान्य HTML और उपयोग नहीं करना android:autoLink=?महत्वपूर्ण है!
नील सांचे

Xamarin के लिए, शब्द दिखाता है लेकिन रेखांकित नहीं है और इन मापदंडों का उपयोग करके क्लिक नहीं किया जा सकता है और इन मापदंडों का उपयोग नहीं किया जा सकता है: AutoLink, linksClickable
maxweber

Xamarin के लिए उन लोगों को सेट करना और टेक्स्ट सेट करना या TextFormatted सेट करना भी शब्द देता है, लेकिन यह न तो क्लिक करने योग्य है और न ही नीला / रेखांकित। ऑटोलिंक को हटाना भी विफल हो जाता है। केवल लिंक हटाने से क्लिक करने योग्य भी विफल हो जाता है। दोनों को निकालना भी फेल है।
मैक्सवेबर

helloWorld.TextFormatted = Html.FromHtml (linkURL); के साथ और उन लोगों के बिना भी विफल रहता है। (लिंक नहीं किया गया, नीला नहीं, क्लिक नहीं किया जा सकता)
मैक्स

25

केवल आपको xml में पाठ दृश्य में इसे जोड़ने की क्या आवश्यकता है

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:autoLink="web"/>

24

सबसे आसान बात जो मेरे लिए काम की है वह है Linkify का उपयोग करना

TextView txt_Message = (TextView) view.findViewById(R.id.txt_message);
txt_Message.setText("This is link https://www.google.co.in/");
Linkify.addLinks(txt_Message, Linkify.WEB_URLS);

और यह स्वचालित रूप से पाठ में पाठ से वेब यूआरएल का पता लगाएगा।


सच है, लेकिन वे क्लिक करने योग्य नहीं होंगे।
फ्रैक्टलबोब

लिंक क्लिक करने योग्य हैं।
ऑक्टेवियन आयनल

19

रिचर्ड, अगली बार, आपको लेआउट एक्सएमएल के बजाय टेक्स्ट व्यू के तहत इस कोड को जोड़ना चाहिए।

android:autoLink="all"

यह इस तरह होना चाहिए।

<TextView 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" 
    android:text="@string/txtCredits"
    android:id="@+id/infoTxtCredits"
    android:autoLink="all"
    android:linksClickable="true">
</TextView>

t2.setMovementMethod(LinkMovementMethod.getInstance());लिंक को क्लिक करने योग्य बनाने के लिए आपको इस कोड ( ) का उपयोग करने की आवश्यकता नहीं है ।

इसके अलावा, यहां सच है: जब तक आप सेट autoLink और linksClickable , पर जोड़ने के लिए मत भूलना String.xml फ़ाइल ताकि क्लिक करने योग्य लिंक काम करेंगे।

<string name="txtCredits"><a href="http://www.google.com">Google</a></string>

3
मेरे लिए काम नहीं करता है। लिंक वास्तव में क्लिक करने योग्य है, लेकिन केवल "Google" ही नहीं बल्कि पूरे स्ट्रिंग को प्रदर्शित किया गया है। वास्तव में, यहां कोई भी उत्तर या संयोजन अब तक काम नहीं करता है।
वायलेट जिराफ

क्या आपका डिवाइस या एमुलेटर इंटरनेट सक्षम है और इसे ON (wifi) पर सेट किया है या LAN कनेक्ट किया है, @ वायलेट जिराफ?
डेविड डिमलंटा

यह है। मैं केवल XML विशेषताओं का उपयोग करके लिंक करने योग्य बनाने में कभी कामयाब नहीं हुआ, इसके लिए जावा कोड का सहारा लेना पड़ा। जो कोई बड़ी बात नहीं है, लेकिन अच्छा नहीं है।
वायलेट जिराफ

18

का उपयोग करके linkify : Linkify पाठ और एक नियमित अभिव्यक्ति का एक टुकड़ा लेने के लिए और क्लिक करने योग्य लिंक में पाठ में regex मैचों में से सभी बदल जाता है

TextView textView = (TextView) findViewById(R.id.textView);
textView.setText("http://www.domain.com");
Linkify.addLinks(textView, Linkify.WEB_URLS);

भूलना मत

import android.widget.TextView;

16

यहां फोन बनाने के लिए बहुत ही एक पंक्ति एंड्रॉइड कोड है और टेक्स्ट व्यू से चयन योग्य है कोई बात नहीं कि क्या स्ट्रिंग है और क्या डेटा है। इसके लिए आपको किसी भी HTML टैग का उपयोग करने की आवश्यकता नहीं है।

TextView textView = (TextView)findViewById(R.id.textView1);
textView.setText("some url is www.google.com phone 7504567890 another url lkgndflg.com ");

// Makes the textView's Phone and URL (hyperlink) select and go.
Linkify.addLinks(textView, Linkify.WEB_URLS | Linkify.PHONE_NUMBERS);

13

मैंने देखा कि android:autoLink="web"इस प्रकार उपयोग करना

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content" 
    android:autoLink="web"/>

यूआरएल के लिए ठीक काम किया लेकिन जब से मैं एक ई-मेल पता और फोन नंबर है कि मैं के साथ-साथ लिंक करना चाहता था था, मैं इस लाइन का उपयोग समाप्त हो गया android:autoLink="all"इस तरह

<TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content" 
        android:autoLink="all"/>

और यह एक आकर्षण की तरह काम करता था।


13

लिंक टेक्स्ट का रंग भी प्रबंधित करें यहां छवि विवरण दर्ज करें

tv_customer_care_no.setLinkTextColor(getResources().getColor(R.color.blue));
  tv_customer_care_no.setText("For us to reach out to you, please fill the details below or contact our customer care at  18004190899 or visit our website http://www.dupont.co.in/corporate-links/contact-dupont.html ");
   Linkify.addLinks(tv_customer_care_no, Linkify.WEB_URLS | Linkify.PHONE_NUMBERS);
   Linkify.addLinks(tv_customer_care_no, Linkify.ALL );

11

उपयोग करते समय और ठीक से स्वरूपित लिंक (उदाहरण के लिए ) पर उपयोग नहीं करना सुनिश्चित करें ।setAutoLinkMask(Linkify.ALL)setMovementMethod(LinkMovementMethod.getInstance())Html.fromHTML()HTML<a href="http://www.google.com/">Google</a>


10

इसे इस्तेमाल करो...

TextView.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        // TODO Auto-generated method stub
                        Intent in=new Intent(Intent.ACTION_VIEW,Uri.parse("http://www.twitter.com/"));
                        startActivity(in);
                    }

                });

और मैनिफ़ेस्ट फ़ाइल में अनुमति जोड़ें

<uses-permission android:name="android.permission.INTERNET"/>

1
यह काम करेगा, लेकिन ध्यान रखें कि एप्लिकेशन को इस क्लिक करने योग्य टेक्स्ट दृश्य से परे इंटरनेट अनुमति की आवश्यकता नहीं हो सकती है। हो सकता है उन मामलों में
आगे निकल जाएँ

2
क्या यह वास्तव में प्रश्न से संबंधित है?
डैरन

2
यह सवाल के लिए प्रासंगिक नहीं था।
एफ़ोलेस्टैड

1
यह कभी असफल नहीं होगा!
स्काईनेट

मुझे यह तरीका पसंद है क्योंकि यह हमें पूर्ण URL के बजाय सिर्फ एंकर टेक्स्ट शो की अनुमति देता है। लंगर पाठ को भी शैलीबद्ध किया जा सकता है जैसे रंगीन हरे और रेखांकित।
खो बच्ची

10

आपको केवल यही चाहिए:

android:autoLink="web"

इस लाइन को TextView में डालें, जो वेब के संदर्भ में क्लिक करने योग्य हो सकता है। URL पता इस TextView के पाठ के रूप में सेट किया गया है।

उदाहरण:

 <TextView
    android:id="@+id/textViewWikiURL"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="20sp"
    android:textStyle="bold"
    android:text="http://www.wikipedia.org/"
    android:autoLink="web" />

10

स्वीकृत उत्तर सही है, लेकिन इसका मतलब यह होगा कि फ़ोन नंबर, नक्शे, ईमेल पते और नियमित लिंक जैसे http://google.comबिना href टैग नो लोंगर क्लिक करने योग्य होंगे क्योंकि आपके पास xml में ऑटोलिंक नहीं हो सकता है।

केवल एक क्लिक करने के लिए पूरा समाधान जो मुझे मिला है वह निम्नलिखित है:

Spanned text = Html.fromHtml(myString);
URLSpan[] currentSpans = text.getSpans(0, text.length(), URLSpan.class);
SpannableString buffer = new SpannableString(text);
Linkify.addLinks(buffer, Linkify.ALL);
for (URLSpan span : currentSpans) {
    int end = text.getSpanEnd(span);
    int start = text.getSpanStart(span);
    buffer.setSpan(span, start, end, 0);
}
textView.setText(buffer);
textView.setMovementMethod(LinkMovementMethod.getInstance());

और TextView नहीं होना चाहिए android:autolink। इसकी कोई आवश्यकता नहीं है android:linksClickable="true"; यह डिफ़ॉल्ट रूप से सही है।


मेरे लिए इसके बिना काम किया, स्वीकृत उत्तर ने ठीक काम किया @ केली क्या आप Android संस्करण और डिवाइस बता सकते हैं जिस पर आपको मुद्दा मिला है?
अखिल पिता

myapp://योजनाओं के लिए काम नहीं करता है (डीप लिंकिंग के लिए)।
कूलमाइंड

7

यह है कि मैंने टेक्स्ट व्यू (कोड द्वारा) में क्लिक करने योग्य और दर्शनीय लिंक को कैसे हल किया

private void setAsLink(TextView view, String url){
        Pattern pattern = Pattern.compile(url);
        Linkify.addLinks(view, pattern, "http://");
        view.setText(Html.fromHtml("<a href='http://"+url+"'>http://"+url+"</a>"));
    }

लेकिन मैं पाठ देखना चाहूंगा और पाठ पर क्लिक करने पर यह लिंक पर पुनर्निर्देशित हो जाएगा (ब्राउज़र द्वारा खोला गया)? यह समाधान हल नहीं करता है, है ना?
डुक ट्रान

6

नीचे दिए गए कोड का उपयोग करें:

String html = "<a href=\"http://yourdomain.com\">Your Domain Name</a>"
TextView textview = (TextView) findViewById(R.id.your_textview_id);
textview.setMovementMethod(LinkMovementMethod.getInstance());
textview.setText(Html.fromHtml(html));

6

[Tested in Pre-lollipop as well as in Lollipop and above]

आप अपने HTML स्ट्रिंग को बैकएंड या अपनी संसाधनों की फ़ाइलों से प्राप्त कर सकते हैं। यदि आप अपने पाठ को संसाधन स्ट्रिंग के रूप में रखते हैं, तो CDATAटैग जोड़ना सुनिश्चित करें :

<string name="your_text">![CDATA[...<a href="your_link">Link Title</a>  ...]]</string>

फिर कोड में आपको स्ट्रिंग प्राप्त करने और इसे HTML के रूप में असाइन करने और लिंक मूवमेंट विधि सेट करने की आवश्यकता है:

String yourText = getString(R.string.your_text);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
   textView.setText(Html.fromHtml(yourText, Html.FROM_HTML_MODE_COMPACT));
} else {
   textView.setText(Html.fromHtml(yourText));
}

try {
   subtext.setMovementMethod(LinkMovementMethod.getInstance());
} catch (Exception e) {
   //This code seems to crash in some Samsung devices.
   //You can handle this edge case base on your needs.
}

5

समस्या होने का कारण यह है कि यह केवल "नग्न" पतों से मेल खाने की कोशिश करता है। "www.google.com" या " http://www.google.com " जैसी चीजें ।

Html.fromHtml () के माध्यम से अपने पाठ को चलाना चाहिए। आपको इसे प्रोग्रामेटिक रूप से करना होगा, लेकिन यह काम करता है।


2
TextView में लिंक स्ट्रिंग के अन्य टेक्स्ट की तुलना में एक अलग रंग है, इसलिए मुझे लगता है कि उन्हें लिंक के रूप में पहचाना जा रहा है। वे सिर्फ क्लिक करने योग्य नहीं हैं :-(
रिचर्ड

4

पता नहीं अगर यह एक और जवाब जोड़ने लायक है, लेकिन सिर्फ मामले में ...

मुझे एक दो स्थानों पर इसका शिकार करना था, लेकिन अंत में काम करने के लिए कोड का यह संस्करण मिला।

strings.xml:

<string name="name1">&lt;a href="http://www.google.com">link text1&lt;/a></string>
<string name="name2">&lt;a href="http://www.google.com">link text2&lt;/a></string>

myactivity.xml:

<TextView 
    android:id="@+id/textview1"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:layout_marginTop="5dp" />

<TextView 
    android:id="@+id/textview2"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:layout_marginTop="5dp" />

myactivty.java (onCreate () में):

TextView tv1 = (TextView)findViewById(R.id.textview1);
TextView tv2 = (TextView)findViewById(R.id.textview2);

tv1.setText(Html.fromHtml(getResources().getString(R.string.name1)));
tv2.setText(Html.fromHtml(getResources().getString(R.string.name2)));
tv1.setMovementMethod(LinkMovementMethod.getInstance());
tv2.setMovementMethod(LinkMovementMethod.getInstance());

यह पाठ के साथ दो क्लिक करने योग्य हाइपरलिंक बनाएगा link text1और link text2जो उपयोगकर्ता को Google पर पुनर्निर्देशित करेगा।


4

ऑटोलिंक फोन ने मेरे लिए काम नहीं किया। निम्नलिखित ने एक आकर्षण की तरह काम किया,

TextView tv = (TextView) findViewById(R.id.emergencynos);
String html2="<br><br>Fire - <b><a href=tel:997>997</a> </b></br></br>";        
tv.append(Html.fromHtml(html2));
tv.setMovementMethod(LinkMovementMethod.getInstance());

4

यदि आपकी आवश्यकता के लिए XML आधारित TextView का उपयोग कर रहे हैं, तो आपको बस दो काम करने होंगे:

  1. अपने लिंक को स्ट्रिंग में पहचानें, जैसे "यह मेरा वेबपेज है।" आप इसे xml या कोड में जोड़ सकते हैं।

  2. Textml वाले xml में, इन्हें जोड़ें:


android:linksClickable="true"

android:autoLink="web"

4

अपने स्ट्रिंग संसाधन में CDATA जोड़ें

strings.xml

<string name="txtCredits"><![CDATA[<a href=\"http://www.google.com\">Google</a>]]></string>

3

मैं ऑटोलिंक का उपयोग पाठ को "ऑटो रेखांकित" करने के लिए करता हूं, लेकिन बस एक "ऑनक्लिक" बनाता है जो इसे प्रबंधित करता है। (मैं खुद इस समस्या में भाग गया)

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="10dp"
            android:textSize="18dp"
            android:autoLink="all"
            android:text="@string/twitter"
            android:onClick="twitter"/>

public void twitter (View view)
    {
        try
        {
            Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://twitter.com/onaclovtech"));
            startActivity(browserIntent);

        }
        finally
        {
        }
    }

किसी भी अनुमति की आवश्यकता नहीं है, जैसा कि आप उन संसाधनों को प्रबंधित करने वाले ऐप्स से इरादे से गुजर रहे हैं, (IE ब्राउज़र)।

मेरे लिए यही काम था। सौभाग्य।


आप एक लिंक नहीं बना रहे हैं, जो क्लिक करने योग्य है, आप बस संपूर्ण TextView क्लिक करने योग्य डाल रहे हैं ... यह सवाल नहीं है।
क्लूज़िएर

सहमत, लेकिन कभी-कभी जो काम करता है, वही काम है। स्पष्ट रूप से सबसे लोकप्रिय जवाब लिखे जाने के 5 साल बाद, यह अभी भी एक समस्या थी, और इसके 6 महीने के लिए मुझे एक ही समस्या थी, लेकिन एक अलग लेकिन काम करने वाले समाधान के साथ समाप्त हो गई।
onaclov2000

2

बस इतना समय बर्बाद करने के लिए आपको getText (R.string.whatever) के बजाय getText (R.string.whatever) का उपयोग करना होगा ...

वैसे भी, यहाँ मुझे मेरा काम कैसे मिला। एक ही टेक्स्ट दृश्य में कई हाइपरलिंक के साथ।

    TextView termsTextView = (TextView) getActivity().findViewById(R.id.termsTextView);
    termsTextView.append("By registering your account, you agree to our ");
    termsTextView.append(getText(R.string.terms_of_service));
    termsTextView.append(", ");
    termsTextView.append(getText(R.string.fees));
    termsTextView.append(", and the ");
    termsTextView.append(getText(R.string.stripe_connected_account_agreement));

    termsTextView.setMovementMethod(LinkMovementMethod.getInstance());



            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/termsTextView"/>

स्ट्रिंग उदाहरण

    <string name="stripe_connected_account_agreement"><a href="https://stripe.com/connect/account-terms">Stripe Connected Account Agreement</a></string>

यह इतना अधिक सीधा-आगे और उपयोग करने में आसान है। मेरे पास कस्टम टेक्स्ट के साथ कई लिंक हैं जो इस वजह से गतिशील रूप से जोड़े गए टेक्स्ट व्यू में काम कर रहे हैं। इसके लिए सबसे अधिक उत्थान की आवश्यकता है। मेरा हाथ टूट गया तार, कस्टम TextViews और HtmlCompat.fromHtml तरीकों पर। बहुत बहुत धन्यवाद @ luca992
पार्थ पटेल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.