2016-08-07 24 views
6

ich eine Textview mit einer Zeichenkette, die zwei Hyperlinks wie unten Umsetzung aber die Links sind nicht ein neues Browser-Fenster zu öffnen:Android Textview Hyperlink

<TextView 
     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:autoLink="web" 
     android:text="@string/agree_terms_privacy"/> 

In string.xml

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

hast du http://stackoverflow.com/questions/2734270/how-do-i-make-links-in-a-textview-clickable überprüft? – user5599807

+0

Überprüfen Sie die Antwort http://stackoverflow.com/a/2746708/2435238 – sJy

+0

Ich schlage vor, mit Spannable vertraut zu machen. http://stackoverflow.com/questions/10696986/how-to-set-the-part-of-the-text-view-is-clickable. – piotrpo

Antwort

4

Haben schauen Sie unten Code-snippet auf, hoffe, es hilft,

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

ich Ihnen empfehlen würde zwei TextViews si haben Sie möchten zwei verschiedene Aktionen:

TextView yourTermsOfUseTextView = (TextView) findViewById(R.id.your_id); 
yourTermsOfUseTextView.setOnclickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        Intent myIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(your_download_link)); 
        startActivity(myIntent); 
       } 
      }); 

Wiederholen Sie die Datenschutzerklärung.

1

Hier ist die Lösung, die für mich funktionierte, nachdem ich mehrere Stack Overflow-Posts durchgesehen hatte. Ich habe es auf Ihre Implementierung zugeschnitten:

1.Entfernen Autolink- für LinkMovementMethod mit und stellen Sie linksClickable auf 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"/> 

Wenn Sie die android:autoLink="web" Eigenschaft verwenden, dann werden Sie haben überschreiben Sie es mit textView.setAutoLinkMask(0); vor dem Aufruf setText() auf Ihrem TextView. Sie können den Link auch so einstellen, dass er in Ihrer Aktivität anklickbar ist, wie in Harshals Antwort, wenn Sie es bevorzugen, aber ich habe es verlassen, da Sie es bereits im Layout hatten. Ich fügte auch eine ID zu Ihrem TextView termsOfUse hinzu, die wir später verwenden werden.

2.ersetzen < mit &lt; in strings.xml und entfernen Sie doppelte Anführungszeichen um die URL

Dies liegt daran, wenn Sie die Zeichenfolge-Ressource abrufen, wird es nicht die eingebettete HTML korrekt analysieren und Aus irgendeinem Grund entgeht es nicht den Anführungszeichen. Also statt:

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

Sie tun möchten:

<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. Parsen der String-Ressource und die Bindung an unsere 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()); 

Hinweis: Html.fromHtml wurde in API 24 als veraltet eingestuft (siehe this post für weitere Informationen zur Vorgehensweise bei Bedarf). Wir verwenden diese Methode, um die erwartete HTML-Formatierung aus unserer Zeichenfolge zu erhalten.