1. ホーム
  2. android

[解決済み] アンドロイドアプリでテキストビューのリンククリックを処理する

2022-04-28 16:25:29

質問

現在、TextViewでHTML入力をこのようにレンダリングしています。

tv.setText(Html.fromHtml("<a href='test'>test</a>"));

表示されているHTMLは外部リソースから提供されているので、自由に変更することはできませんが、もちろんHTMLに正規表現を加えて、例えばhrefの値を別のものに変更することは可能です。

私が欲しいのは、リンクがクリックされるとブラウザのウィンドウが開くのではなく、アプリの中から直接処理できるようにすることです。これは実現可能でしょうか?href-valueのプロトコルを"myApp://"のように設定し、私のアプリにそのプロトコルを処理させるものを登録すれば可能かと思います。もしこれが本当にベストな方法であれば、その方法を知りたいのですが、もっと簡単な方法として、"このテキストビューでリンクがクリックされたとき、リンクのhref値を入力パラメータとして受け取るイベントを発生させたい".というのがあればいいのですが。

解決方法は?

1年近く経った今、私がこの問題を解決した方法は、また別のものです。私はリンクを自分のアプリで処理したかったので、もう少し簡単な解決策があります。

デフォルトのインテント フィルタに加えて、ターゲット アクティビティに ACTION_VIEW インテント、特に、スキーム com.package.name

<intent-filter>
    <category android:name="android.intent.category.DEFAULT" />
    <action android:name="android.intent.action.VIEW" />
    <data android:scheme="com.package.name" />  
</intent-filter>

で始まるリンクは com.package.name:// は私の活動によって処理されます。

つまり、伝えたい情報を含むURLを構築すればいいわけです。

com.package.name://action-to-perform/id-that-might-be-needed/

ターゲットアクティビティで、このアドレスを取得することができます。

Uri data = getIntent().getData();

私の例では、単純にチェックすることができました。 data というのも、NULL値でない場合は、このようなリンクによって呼び出されたことが分かるからです。そこから、適切なデータを表示するために必要な命令をURLから抽出します。