[解決済み] アンドロイドアプリでテキストビューのリンククリックを処理する
質問
現在、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から抽出します。
関連
-
[解決済み] TextViewでテキストを水平・垂直方向にセンタリングするには?
-
Android カスタムスピナーコントロールのドロップダウン・ボックスの実装
-
Android Studio常见错误之:Rendering Problems/The following classes could not be instantiated
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] Androidでアクティビティ起動時にEditTextにフォーカスが当たらないようにする方法
-
[解決済み] Androidの「コンテキスト」とは何ですか?
-
[解決済み] TextViewのリンクをクリック可能にする方法
-
[解決済み] AndroidでTextViewをスクロール可能にする
-
[解決済み】Android UserManager.isUserAGoat()の正しい使用例?)
-
[解決済み】AndroidでTextViewのfontFamilyを変更する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
AAPT2エラーについて:詳しくはログをご確認ください。
-
adb シェルがデバイスのオフラインを求めるプロンプトを表示する
-
Gradle のエラーです。gradle-core.jar (com.android.tools.build:gradle-core:x.x.x) を見つけられませんでした。
-
プログラム "git.exe "を実行できない場合の正しい解決方法です。CreateProcessエラー=2
-
デフォルトのアクティビティが見つからない場合の対処法
-
エラーが発生しました。ArrayAdapter は、リソース ID が TextView である必要があります。
-
Android studioのインストールと問題発生、Emulator: PANIC: AVDのシステムパスが見つかりません。
-
android studioが "The activity must be exported or contain an intent-filter" と表示され実行される。
-
[解決済み] Androidのレイアウトで文字に下線を引くことはできますか?
-
[解決済み] Android TextView with Clickable Links: クリックをキャプチャする方法とは?