web-dev-qa-db-fra.com

Hyperlien Android TextView

J'implémente un TextView avec une chaîne contenant deux hyperliens comme ci-dessous mais les liens n'ouvrent pas une nouvelle fenêtre de navigateur:

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

Dans 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>
12
Yen Pei Tay

Voici la solution qui a fonctionné pour moi, après avoir parcouru plusieurs posts Stack Overflow. Je l'ai adapté à votre implémentation:

1.Supprimez la liaison automatique au profit de LinkMovementMethod et définissez linksClickable sur 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"/>

Si vous utilisez la propriété Android:autoLink="web", vous devrez alors la remplacer par textView.setAutoLinkMask(0); avant d'appeler setText() sur votre TextView. Vous pouvez également définir le lien pour qu'il soit cliquable dans votre activité, comme dans la réponse de Harshal si vous préférez, mais je l'ai laissé, car vous l'aviez déjà dans la présentation. J'ai également ajouté à votre TextView un identifiant appelé termsOfUse que nous utiliserons plus tard.

2.Remplacez <par &lt; dans strings.xml et supprimez les guillemets autour de l'URL

En effet, lorsque vous récupérez la ressource chaîne, elle n'analysera pas correctement le code HTML incorporé et, pour une raison quelconque, n'échappera pas aux guillemets. Donc au lieu de:

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

vous aurez envie de faire:

<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. Analyser la ressource chaîne et la lier à notre 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());

Remarque: Html.fromHtml est obsolète dans l'API 24 (voir cet article pour plus d'informations sur la gestion de cette information si nécessaire). Nous utilisons cette méthode pour obtenir le formatage HTML attendu à partir de notre chaîne.

10
nicolettecodes

Regardez l'extrait de code ci-dessous, espérons que cela vous aidera

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

ce travail pour moi

Ajoutez ceci dans votre affichage de texte: Android: autoLink = "all" Android: clickable = "true"

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

J'espère que cela vous aidera.

3
Rebe

Je vous recommande d’avoir deux TextViews puisque vous voulez deux actions différentes:

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

Répétez la politique de confidentialité.

1
Joaquim Ley

Ajoutez simplement le code ci-dessous dans votre Textview

Android:autoLink="email"   
0
Soumen Das