android - मैं एक TextView क्लिक करने योग्य में लिंक कैसे बना सकता हूं?




hyperlink android-textview (20)

मेरे पास निम्नलिखित टेक्स्ट व्यू परिभाषित है:

<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>

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

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

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

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

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

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


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

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());

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

strings.xml

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

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

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


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

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>"));
    }

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

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"/>

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

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

और नहीं:

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

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

फिर (जैसा कि here ) इस विकल्प को अपने टेक्स्ट व्यू पर सेट करें:

 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 या अन्य मैनुअल हैक की आवश्यकता है।


केवल xml में टेक्स्ट व्यू में इसे जोड़ने की आवश्यकता है

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

चूंकि databinding समाप्त हो गई है, इसलिए मैं क्लिक करने योग्य लिंक के साथ एचटीएमएल टैग का समर्थन करने वाले टेक्स्टविज़्स को डाटाबेसिंग के लिए अपना समाधान साझा करना चाहता हूं।

प्रत्येक From.html को पुनर्प्राप्त करने से बचने और उन्हें From.html का उपयोग करके HTML समर्थन देने से बचने के लिए हम From.html बढ़ाते हैं और तर्क को setText() में डाल देते हैं

public class HtmlTextView extends TextView {

    public HtmlTextView(Context context) {
        super(context);
    }

    public HtmlTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public HtmlTextView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    public void setText(CharSequence text, BufferType type) {
        super.setText(Html.fromHtml(text.toString()), type);
        this.setMovementMethod(LinkMovementMethod.getInstance());
    }
}

मैंने एक गलती की है जो उदाहरण इकाई दिखाती है और इसका उपयोग करने के लिए देखती है।


नीचे कोड का प्रयोग करें:

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));

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

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

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 (ऑनक्रेट () में:

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 text1 और link text2 टेक्स्ट 2 के साथ दो क्लिक करने योग्य हाइपरलिंक्स link text2 जो उपयोगकर्ता को Google पर रीडायरेक्ट करेगा।


मेरा कोड इस तरह था:

<TextView
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/link"
    android:text="@string/forgot"
    android:layout_marginTop="16dp"
    android:gravity="center"
    android:linksClickable="true"/>

मेरा जावा कोड इस तरह था:

/*TextView action*/
        TextView textView = (TextView) findViewById(R.id.link);
        textView.setMovementMethod(LinkMovementMethod.getInstance());
        textView.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(LoginActivity.this,forgot.class));
            }
        });  

यह सिर्फ एक और गतिविधि के लिंक को इंगित करता है। लेकिन वह लिंक क्लिक करने योग्य है और आसानी से काम करता है। एंड्रॉइड स्टूडियो 1.5 में परीक्षण (पूर्वावलोकन)


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

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);

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


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

        <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
        {
        }
    }

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

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


मैंने इस लाइन को 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:[email protected]?Subject=Lost%20Password" target="_top">[email protected]</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>

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

Linkify.addLinks(TextView, Linkify.ALL);

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


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

  • एक संसाधन एचटीएमएल की तरह स्ट्रिंग जोड़ें:

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

     <TextView
        android:id="@+id/link"
        android:text="@string/link" />`
    
  • अपने TextView में प्रोग्रामेटिक रूप से उचित मूवमेंट विधि जोड़ें:

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

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


यह पता लगाने के लिए बस इतना समय बर्बाद हो गया है कि आपको getString (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>

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

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()); )।

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

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

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


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

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());






clickable