Android में हाइपरलिंक टेक्स्टव्यू बनाएं


80

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


डुप्लिकेट: stackoverflow.com/questions/2116162/…
m0skit0


1
बस Linkify.addLinks (TextView, Linkify.ALL) का उपयोग करें;
AndroidGeek

जवाबों:


135

इस कोशिश करो, और मुझे पता है कि क्या होता है ..

जावा कोड का उपयोग करना:

TextView textView =(TextView)findViewById(R.id.textView);
textView.setClickable(true);
textView.setMovementMethod(LinkMovementMethod.getInstance());
String text = "<a href='http://www.google.com'> Google </a>";
textView.setText(Html.fromHtml(text));

एपीआई स्तर से = = 24 इसके बाद Html.fromHtml(String source)उपयोग के बजाय पदावनत किया जाता है fromHtml(String, int),

textView.setText(Html.fromHtml(text, Html.FROM_HTML_MODE_COMPACT));

या अपने TextView विजेट विशेषताओं के अंदर लेआउट xml फ़ाइल में

android:autoLink="web"
android:linksClickable="true"

मुझे अपेक्षित आउटपुट मिला। उर उत्तर के लिए धन्यवाद
श्रीनिवास

1
यदि हाइपरलिंक पाठ स्ट्रिंग्स.xml में मौजूद है, तो सुझाए गए उत्तरों में से कोई भी काम नहीं कर रहा है। यह बहुत ही अजीब तरीके से काम करता है। अगर मैं टेक्स्ट को सीधे लेआउट xml में सेट करता हूं तो यह काम करता है, लेकिन जब मैंने java कोड में टेक्स्टव्यू डेटा सेट किया तो यह काम नहीं करता है।
वेलु

2
बस यह उल्लेख करने के लिए कि यदि आप जावा कोड का उपयोग करते हैं तो आपको android:autoLink="web"XML से निकालने की आवश्यकता है । मेरे पास दोनों थे और यह काम नहीं किया।
20ntonis Papadakis

53

android:autoLink="web"अपने TextView xml में उपयोग करें। यह स्वचालित रूप से क्लिक-सक्षम (यदि पाठ में पाया जाता है) url को परिवर्तित करना चाहिए


14
इसमें Android भी शामिल है: linksClickable = "true"
Ajith Memana

इस मामले में @wqaslam जहां हमने एक लिंक डाला।
गर्ग का

1
@ गर्ग-यह वह पाठ है जिसे आपने
टेक्स्टव्यू

28

सभी परीक्षण किए गए और काम कर रहे 100%
समाधान: android:autoLink="web"
नीचे एक पूर्ण उदाहरण

नमूना लेआउट 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/txtLostpassword"
        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" />

स्ट्रिंग में स्ट्रिंग। 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>

3
यह काम अगर मैं इस लाइन को बदल नहीं करता है> cleverfinger.com.au/user-guide/ </a> </ स्ट्रिंग > की तरह एक ऐसे भिन्न पाठ के लिए: यहाँ क्लिक करें
Musculaa

2
यह तभी काम करता है जब पाठ में पूर्ण URL हो जैसे: www.something.com
राहुल तिवारी

7

यह टेक्स्टव्यू की डिफ़ॉल्ट संपत्ति का उपयोग करके भी किया जा सकता है

android:autoLink="email"

5

नोट: - Html.fromHtml Android N में पदावनत है

आपको Android NAndroid के चेक और समर्थन और उच्चतर संस्करण करने की आवश्यकता है

                  //Set clickable true
                 tagHeading.setClickable(true);
                 
                  //Handlle click event
                  tagHeading.setMovementMethod(LinkMovementMethod.getInstance());

                if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
                    tagHeading.setText(Html.fromHtml("<a href='https://github.com/hiteshsahu'>https://github.com/hiteshsahu</a>", Html.FROM_HTML_MODE_LEGACY));
                } else {
                    tagHeading.setText(Html.fromHtml("<a href='https://github.com/hiteshsahu'>https://github.com/hiteshsahu</a>"));
                }
 

वैकल्पिक

आप टेक्स्ट व्यू पर ऑटोलिंक फ्लैग को प्रोग्रामेटिक रूप से जोड़ना नहीं चाहते हैं।

Android: ऑटोलिंक = "वेब"

Android: linksClickable = "true"

इस तरह आपको <a href='somelink'>टैग जोड़ने की आवश्यकता नहीं है ।

कौन सा, एक नुकसान है आप जोड़ना चाहते हैं तो hyperlinkएक पर textआप इसे इस तरह से नहीं कर सकते। उदाहरण के लिए आप ऐसा कुछ नहीं कर सकते: - [ hiteshsahu ] [१]

           <TextView
                android:id="@+id/tag_info"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/tag_ll"
                android:layout_gravity="left"
                android:layout_margin="10dp"
                android:autoLink="web"
                android:linksClickable="true"
                android:text="https://github.com/hiteshsahu"
                android:textColor="@color/secondary_text" />

दोनों दृष्टिकोण से परिणाम: -

https://github.com/hiteshsahu


1

एसडीके के नवीनतम संस्करण के fromHtmlलिए पदावनत उपयोग नीचे की पंक्ति में है

String yourtext = "<a style='text-decoration:underline' href='http://www.sample.com'> Sample Website </a>";
    if (Build.VERSION.SDK_INT >= 24) {
        textView.setText(Html.fromHtml(yourtext, Html.FROM_HTML_MODE_LEGACY));
    } else {
        textView.setText(Html.fromHtml(yourtext));
    }

0

मैंने एक टेक्स्टव्यू का निम्नलिखित विस्तार कार्य किया है।

@SuppressLint("SetTextI18n")
fun TextView.makeHyperLink(url: String) {
    text = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        Html.fromHtml("<a href='${url}'>${text}</a>", Html.FROM_HTML_MODE_COMPACT)
    } else {
        Html.fromHtml("<a href='${url}'>${text}</a>")
    }
    movementMethod = LinkMovementMethod.getInstance()
    isClickable = true
}

और इसे इस तरह बुला रहा है

tvTos.makeHyperLink(tos_url)

आप टेक्स्ट को एक पैरामीटर के रूप में भी पास कर सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.