TextViewでellipsizeとSpannableを同時に使用したい
Spannableを使用してTextView内のURLのリンクをタップできるようにしたのですがellipsizeの設定が無効になってしまいます。
海外のStackOverFlowでも同じような質問がありましたがイマイチ解決策が分かりません。
https://stackoverflow.com/questions/14691511/textview-using-spannable-ellipsize-doesnt-work
解決方法について知見のある方がいらっしゃれば教えていただければと思います。
下記が現在のコードです。
xml
<TextView
android:id="@+id/message"
style="@style/MessageStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
style
<style name="MessageStyle">
<item name="android:maxLines">5</item>
<item name="android:ellipsize">end</item>
<item name="android:textSize">14sp</item>
<item name="android:textColor">@color/textColorSubTitle</item>
</style>
SpannableStringのカスタムクラス
public class URLLinkSpannableString extends android.text.SpannableString {
public URLLinkSpannableString(CharSequence c) {
super(c);
final Pattern URL_PATTERN = Pattern.compile("(http://|https://){1}[\\w\\.\\-/:\\#\\?\\=\\&\\;\\%\\~\\+]+", Pattern.CASE_INSENSITIVE);
final Matcher matcher = URL_PATTERN.matcher(c);
while (matcher.find()) {
String matcherText = matcher.group();
setSpan(new URLSpan(matcherText), matcher.start(), matcher.end(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
}
TextViewにセットする部分(※RecyclerViewAdapter内で使用しています。)
holder.getMessageTextView().setText(new URLLinkSpannableString(activity.getMessage()));
holder.getMessageTextView().setMovementMethod(LinkMovementMethod.getInstance());