web-dev-qa-db-ja.com

TextViewのリンク

TextViewにリンクを配置する必要があります。タグ<a href="link">Text for link</a>およびその他のテキストを含む文字列があります。問題は、プロジェクトを実行するとテキストは表示されるが、クリックできないことです。 <b>タグも試してみて、それが機能するかどうかを確認しましたが、機能しないようです。

Linkify を使用せずにこれを機能させるにはどうすればよいですか?

52
Cata

すべてのご協力ありがとうございます。

Androidサンプルでいくつかの例を見つけた後、私はこの仕事をなんとかすることができました。

コードは次のとおりです。

textView.setText(Html.fromHtml(
            "<b>text3:</b>  Text with a " +
            "<a href=\"http://www.google.com\">link</a> " +
            "created in the Java source code using HTML."));
textView.setMovementMethod(LinkMovementMethod.getInstance());

これが他の人を助けることを願っています...

114
Cata

Htmlからリンクを機能させるのはちょっと難しいです:

  1. Xml _Android:text="@string/…_またはsetText()を介してテキストを適用します(他の回答を参照)

  2. textView.setMovementMethod(LinkMovementMethod.getInstance())を使用して、リンクをクリック可能にします(他の回答を参照)

  3. [〜#〜] not [〜#〜] XMLリソースに_Android:autoLink="web"_を追加します(セクションTextView)、そうでない場合、Aタグは正しくレンダリングされず、クリックできませんもはや。

備考1:
OnClickListenerが役立つのは、TextViewにリンクが1つしか含まれておらず、ユーザーがリンクを脇でクリックした場合でも、TextView内でナビゲーションをトリガーする場合。

備考2:
_Android:linksClickable="true"_はまだ機能しません(Android 3.2)現在、代わりにp。2を使用してください。

41

Linkifyは、リンクを作成するために使用する必要があるクラスです。ところで、Linkifyを使用しない理由は何ですか?

Webサイトにアクセスしたり、スキーマに基づいて電話番号を呼び出すなどのアクションのために、テキストビュー内のすべてのテキストをリンクできます。 Androidはそれを行う最も簡単な方法を提供します。以下のコードを考慮してください。

TextView noteView = (TextView) findViewById(R.id.noteview);
noteView.setText(someContent);
Linkify.addLinks(noteView, Linkify.ALL);

カスタムリンクを作成するために、同じLinkifyクラスがさまざまなオプションを提供します。 Googleは これに関するブログ投稿 を公開しています。

28
Gopinath

私はそれを理解できませんでしたが、最終的には次のようなことをしたときに機能し始めました:

tvTermsOfUse.setText(Html.fromHtml(getString(R.string.tv_terms_of_use_html)));
Linkify.addLinks(tvTermsOfUse, Linkify.ALL);
tvTermsOfUse.setMovementMethod(LinkMovementMethod.getInstance());

テキストビューは次のようになります。

<TextView
    Android:id="@+id/tv_terms_of_use"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_alignParentBottom="true"
    Android:layout_centerHorizontal="true"
    Android:textAlignment="gravity"
    Android:gravity="center"
    Android:textColor="@Android:color/white"
    Android:textSize="15sp" />

および文字列res:

<string name="tv_terms_of_use_html">
    <![CDATA[This is link to <a href="http://google.com/">Google</a>.]]>
</string>

重要な部分:Linkify.addLinksを行う必要がありますbeforetvTermsOfUse.setMovementMethod、それ以外の場合は機能しません。

XMLでは他の設定は必要ありません。

自分で理解するのに約1時間かかりました。

編集:

@rfellonsコメントによると

ありがとう。また、私のために働く...しかしだけで

<uses-permission Android:name="Android.permission.INTERNET"/>

manifest.xmlで。 – rfellons 9月7日13時31分

必ず確認してください。

23
Damian Walczak

つかいます

Android:linksClickable="true"
Android:autoLink="web"
20
sonida

何らかの理由で回答に返信できません。 _textView.setText_を省略して文字列リソースに配置し、_Android:text_を使用して設定できることを伝えたいだけです。 textView.setMovementMethod(LinkMovementMethod.getInstance());;を保持するだけです。残念ながら_Android:linksClickable="true"_自体は機能しません。

3
Kevin

解決策:Linkify.addLinks(chatText,Linkify.ALL);

1
manav patadia

これはかなり正確に動作します:(textviewプロパティで、xmlファイル内)

Android:autolink="web"
0
Saurabh

リンクを動的に追加するには(サーバーから取得)、これは機能します。

textView.setText(Html.fromHtml(
                "<a href=" + response.getLink()
                        + ">" + context.getString(R.string.link_from_server) + "</a> "));

xMLでこれを追加します。

Android:linksClickable="true"

Strings.xmlにこれがある場合:

<string name="link_from_server">Dynamic Link</string>

これにより、テキストビューに「ダイナミックリンク」が追加され、これにタッチすると、サーバーから提供されたリンクに移動します。

0
cgr