私のアプリケーションは、Stack Overflowでここと同じマークアップを持つリンクを含むことが多いAPIからコメントを読み込みます。AndroidでStackOverflowのようにマークアップをリンクするにはどうすればよいですか?
//this is the markup I am referring to
[Here's a picture](https://www.web.com/sub/path/to/picture/?st=JHTYA46&am-p;sh=487Bac48)
(私はそれをGoogleヘルプには、このマークアップスタイルの名前がある場合、私はコメントで知らせてください)私は
private static final String REGEX_LINK_MARKUP = "\\[(.*?)\\]\\((.*?)\\)";
private static final String REGEX_LINK_REPLACEMENT = "<a href=\"$2\">$1</a>";
commentText.setText(comment.getBody().replaceAll(REGEX_LINK_MARKUP, REGEX_LINK_REPLACEMENT)));
と
android:autoLink="all"
を使用してリンクに変換してみました
もちろんhrefの部分をクリックできるHTMLが表示されているので、現在私はリンクに変換しています
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
//the constants are the same patterns from above
commentText.setText(Html.fromHtml(comment.getBody().replaceAll(REGEX_LINK_MARKUP, REGEX_LINK_REPLACEMENT), Html.FROM_HTML_MODE_LEGACY));
} else {
commentText.setText(Html.fromHtml(comment.getBody().replaceAll(REGEX_LINK_MARKUP, REGEX_LINK_REPLACEMENT)));
}
正しく色付きのスパンが表示されるようになりましたが、クリックできません。フィールドには、すでにマークアップのこのタイプを作るための正しい方法は何有意差(リンクはunclickableある)
android:autoLink="none"
- を行うものではありません、私は
none
またはall
に次を残すかどうかandroid:linksClickable="true"
を持っていますTextViewでクリック可能?
- HTMLを使用せずにTextViewリンクを作成する方法はありますか?
- 私の非常に基本的なパターンよりも効率的な正規表現がありますか?
このタイプの式 '\ [(。*?)\] \((* *))\)'を使用する場合は注意してください。エスケープされたデリミタがデリミタの内部で有効である可能性があります。 – sln
良いアドバイス、これは怠け者の最初の試みでした。私はコメントに基づいていました。 "fsfsg [dfsdf sdfds](...):)"のようなものに遭遇したので、怠け者のマッチングにしました –