1. ntsk

    No comment

    ntsk
Changes in body
Source | HTML | Preview
@@ -1,72 +1,72 @@
# リンク化できるものを全てリンクにする
XMLなら、
```xml
android:autoLink="all"
```
コード内で書くなら、
```java
textView.setAutoLinkMask(Linkify.ALL);
```
を指定することで、メールアドレス、URL、電話番号、住所(日本語非対応)をリンクにできる。```Linkify.EMAIL_ADDRESSES```や```Linkify.WEB_URLS```のようにして、メールアドレスやURLだけを個別に指定することも可能。
https://developer.android.com/reference/android/widget/TextView.html#attr_android:autoLink
# 特定のサイトのみリンク化する
Linkify.MatchFilterを使ってパターンにマッチしたURLのみをリンク化する。以下はYoutubeのみを許可した例。
```java
Linkify.addLinks(textView, Patterns.WEB_URL, null, new Linkify.MatchFilter() {
@Override
public boolean acceptMatch(CharSequence charSequence, int start, int end) {
String url = charSequence.subSequence(start, end).toString();
Pattern pattern = Pattern.compile("^https?://((www\\.)?youtube\\.com|youtu\\.be)/");
Matcher matcher = pattern.matcher(url);
return matcher.find();
}
}, null);
```
# 特定のワードがあったらリンク化する
-Linkify.TransformFilterを使ってパターンにッチしたワードをリンク化する。addLinksでスキームを指定すると先頭に追加してリンク化できる。以下は@付きのテキストがあったらTwitterリンクにする例。
+Linkify.TransformFilterを使ってパターンにッチしたワードをリンク化する。addLinksでスキームを指定すると先頭に追加してリンク化できる。以下は@付きのテキストがあったらTwitterリンクにする例。
```java
Pattern pattern = Pattern.compile("@([A-Za-z0-9_-]+)");
String scheme = "http://twitter.com/";
Linkify.addLinks(textView, pattern, scheme, null, new Linkify.TransformFilter() {
@Override
public String transformUrl(Matcher matcher, String s) {
return matcher.group(1);
}
});
```
# aタグをリンク化する
HTMLクラスのfromHtmlを使うことで、aタグをリンク化できる。クリックできるようにするには、LinkMovementMethodをセットする必要がある。
https://developer.android.com/reference/android/text/Html.html
```java
textView.setText(Html.fromHtml("<a href=\"https://qiita.com/\">qiita</a>"));
textView.setMovementMethod(LinkMovementMethod.getInstance());
```
※from.HtmlはAPIレベル24以上ではdeprecetedになっているので、ヘルパークラスなどを作ると良いよという記事があった。
https://stackoverflow.com/questions/37904739/html-fromhtml-deprecated-in-android-n
```java
@SuppressWarnings("deprecation")
public static Spanned fromHtml(String html){
Spanned spanned;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
spanned = Html.fromHtml(html,Html.FROM_HTML_MODE_LEGACY);
} else {
spanned = Html.fromHtml(html);
}
return spanned;
}
```
# はまったこと
Linkify.addLinksを設定した後にsetMaxLinesを指定するとリンク化が無効になってしまう。動的に行数を変化させているViewの場合には、setMaxLineの後にかけるなどの注意が必要。