Android TextView Hyperlink

前端 未结 8 740
悲&欢浪女
悲&欢浪女 2021-02-05 03:45

I\'m implementing a TextView with a string containing two hyperlinks as below but the links are not opening a new browser window:



        
相关标签:
8条回答
  • 2021-02-05 03:48

    Just add below code in your Textview

    android:autoLink="email"   
    
    0 讨论(0)
  • 2021-02-05 03:49

    MainActivity.java

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

    I removed most of the attributes on my TextView to match what was in the demo

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

    Don't forget to remove autoLink="web" if you are calling setMovementMethod()

    0 讨论(0)
  • 2021-02-05 03:55

    Here is the solution that worked for me, after looking through multiple Stack Overflow posts. I've tailored it to your implementation:

    1. Remove autolink in favor of using LinkMovementMethod, and set linksClickable to true

    <TextView
        android:id="@+id/termsOfUse"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:gravity="center"
        android:textColor="#ffffff"
        android:paddingLeft="50dp"
        android:paddingRight="50dp"
        android:textSize="14sp"
        android:clickable="true"
        android:linksClickable="true"
        android:textColorLink="@color/colorPrimary"
        android:text="@string/agree_terms_privacy"/>
    

    If you use the android:autoLink="web" property then you'll have to override it with textView.setAutoLinkMask(0); before calling setText() on your TextView. You can also set the link to be clickable in your activity instead like in Harshal's answer if you prefer, but I left it since you already had it in the layout. I also added an id to your TextView called termsOfUse which we'll use later.

    2. Replace < with &lt; in strings.xml and remove double quotes around the url

    This is because when you retrieve the string resource, it won't parse the embedded html correctly, and for some reason it doesn't escape the double quotes. So instead of:

    <string name="agree_terms_privacy">By continuing, you agree to our <a href="http://link1/terms">Terms of Use</a> and read the <a href="http://link1/privacy">Privacy Policy</a></string>
    

    you'll want to do:

    <string name="agree_terms_privacy">By continuing, you agree to our &lt;a href=http://link1/terms>Terms of Use&lt;/a> and read the &lt;a href=http://link1/privacy>Privacy Policy&lt;/a></string>
    

    3. Parsing the string resource and binding it to our TextView

    Spanned policy = Html.fromHtml(getString(R.string.agree_terms_privacy));
    TextView termsOfUse = (TextView)findViewById(R.id.termsOfUse);
    termsOfUse.setText(policy);
    termsOfUse.setMovementMethod(LinkMovementMethod.getInstance());
    

    Note: Html.fromHtml has been deprecated in API 24 (see this post for more information on how to handle this if needed). We use this method to get the expected HTML formatting from our string.

    0 讨论(0)
  • 2021-02-05 03:58

    You can use like bellow..

    1. textview xml

      <TextView
       android:id="@+id/tv_welcome_message"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"            
       android:textSize="16sp"/>
      
    2. In activity

       TextView   tv_welcome_message=(TextView) findViewById(R.id.tv_welcome_message); 
       tv_welcome_message.setMovementMethod(LinkMovementMethod.getInstance());
       String text = " <a href='http://www.google.com'> Google </a>";
       tv_welcome_message.setText(Html.fromHtml(text));
      
    0 讨论(0)
  • 2021-02-05 04:05

    This works for me

    Add this in your textview:

    android:autoLink="all"
    android:clickable="true"
    

    https://www.youtube.com/watch?v=UnJxyfyDyHU

    I hope this help you.

    0 讨论(0)
  • 2021-02-05 04:07

    Just use Linkify

    textView.text = text
    Linkify.addLinks(textView, Linkify.WEB_URLS)
    
    0 讨论(0)
提交回复
热议问题