web-dev-qa-db-ja.com

Android TextView Hyperlink

次のように2つのハイパーリンクを含む文字列でTextViewを実装していますが、リンクは新しいブラウザーウィンドウを開きません。

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

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>
18
Yen Pei Tay

以下は、複数のStack Overflowポストを調べた後、私のために働いたソリューションです。実装に合わせて調整しました。

1。LinkMovementMethodを使用するために自動リンクを削除し、linksClickableを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"/>
_

_Android:autoLink="web"_プロパティを使用する場合、TextViewでtextView.setAutoLinkMask(0);を呼び出す前に、setText()でオーバーライドする必要があります。また、必要に応じてHarshalの答えのようにリンクをアクティビティでクリック可能に設定することもできますが、既にレイアウトに含まれているため、リンクを残しました。また、後で使用するtermsOfUseというIDをTextViewに追加しました。

2。strings.xmlで<を_&lt;_に置き換え、URLの前後の二重引用符を削除

これは、文字列リソースを取得するときに、埋め込まれたhtmlを正しく解析せず、何らかの理由で二重引用符をエスケープしないためです。代わりに:

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

あなたがしたいでしょう:

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

。文字列リソースを解析して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());
_

注:Html.fromHtmlはAPI 24で非推奨になりました(必要に応じてこれを処理する方法の詳細については この投稿 を参照してください)。このメソッドを使用して、文字列から期待されるHTML形式を取得します。

23
nicolettecodes

以下のコードスニペットをご覧ください。それが役立つことを願っています。

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

私のためのこの仕事

これをテキストビューに追加します:Android:autoLink = "all" Android:clickable = "true"

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

これがお役に立てば幸いです。

4
Rebe

2つの異なるアクションが必要なため、2つのTextViewsを使用することをお勧めします。

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

プライバシーポリシーを繰り返します。

1
Joaquim Ley

Textviewに以下のコードを追加するだけです

Android:autoLink="email"   
0
Soumen Das