現在、TextView で HTML 入力を次のようにレンダリングしています。
tv.setText(Html.fromHtml("<a href='test'>test</a>"));
表示される HTML は外部リソースから提供されるため、自由に変更することはできませんが、もちろん HTML を正規表現で改ざんして、href 値を別の値に変更することはできます。
私が望んでいるのは、リンクをクリックしてブラウザ ウィンドウを開くのではなく、アプリ内から直接リンク クリックを処理できるようにすることです。これは実現可能でしょうか。href 値のプロトコルを「myApp://」などに設定し、アプリがそのプロトコルを処理できるように登録することは可能だと思います。これが本当に最善の方法である場合は、その方法を知りたいのですが、「このテキストビューでリンクがクリックされたときに、リンクの href 値を入力パラメータとして受け取るイベントを発生させたい」と言うだけの簡単な方法があることを願っています。
ベストアンサー1
ほぼ 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();
私の例では、null 値をチェックするだけで済みますdata
。null でない場合は、そのようなリンクによって呼び出されたことが分かるからです。そこから、適切なデータを表示するために必要な指示を URL から抽出します。