1. ホーム
  2. android

[解決済み] TextViewのリンクをクリック可能にする方法

2022-03-20 10:19:44

質問

以下のようなTextViewが定義されています。

<TextView 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" android:text="@string/txtCredits"
    android:autoLink="web" android:id="@+id/infoTxtCredits"
    android:layout_centerInParent="true"
    android:linksClickable="true"></TextView>

ここで @string/txtCredits を含む文字列リソースです。 <a href="some site">Link text</a> .

Android は TextView 内のリンクをハイライトしていますが、クリックに反応しません。何か間違ったことをしているのでしょうか? このように単純なことでも、アクティビティ内のTextViewにonClickListenerを設定する必要があるのでしょうか?

文字列リソースの定義の仕方に関係があるようです。

これはうまくいきません。

<string name="txtCredits"><a href="http://www.google.com">Google</a></string>

しかし、これはそうです。

<string name="txtCredits">www.google.com</string>

私は完全なURLを表示するよりも、テキストリンクを表示したいので、これは残念なことです。

解決方法は?

APIデモの中に、私の問題を解決する方法が隠されていたのです。

ファイル リンク.java :

    // text2 has links specified by putting <a> tags in the string
    // resource.  By default these links will appear but not
    // respond to user input.  To make them active, you need to
    // call setMovementMethod() on the TextView object.

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

デモの内容と一致するように、TextViewの属性のほとんどを削除しました。

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

これで解決しました。発覚して修正するのは結構大変です。

重要なこと : を削除することを忘れないでください。 autoLink="web" を呼び出している場合 setMovementMethod() .