-
Android TextView URL link 처리하기Android 2020. 12. 28. 15:35반응형
android TextView 에서 URL 링크를 클릭하고 표시 하는 방법입니다.
아래의 옵션을 layout xml 의 TextView에 추가 해주면 됩니다.
android:linksClickable="true" android:autoLink="web"
ex>
<TextView android:id="@+id/tvExample" android:layout_width="match_parent" android:layout_height="wrap_content" android:linksClickable="true" android:autoLink="web" tools:text="https://dnight.tistory.com/" />
URL 링크의 색상은 Appthema 의 Accent 색상을 따라갑니다.
다른 색상을 사용 할 경우 styles.xml 에 style 을 추가하여 적용 합니다.
ex>
style.xml
<style name="UrlLinkAccent"> <item name="colorAccent">#1b73e8</item> </style>
<TextView android:id="@+id/tvExample" android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/UrlLinkAccent" android:linksClickable="true" android:autoLink="web" tools:text="https://dnight.tistory.com/" />
그리고 링크에 밑줄이 표기되는 것을 제거하고 싶을 경우 아래의 코드를 커스텀 뷰로 추가하여 적용합니다.
/** * AutoLink 기능에 의해 생성되는 링크에 밑줄이 표시되지 않게 하는 TextView * @author YMKim */ public class NoUnderlineTextView extends TextView { public NoUnderlineTextView(Context context) { super(context); } public NoUnderlineTextView(Context context, AttributeSet attrs) { super(context, attrs); } public NoUnderlineTextView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override public void setText(CharSequence text, BufferType type) { super.setText(text, type); stripUnderlines(); } private void stripUnderlines() { CharSequence seq = getText(); //XML inflate 를 할 경우에는 Spannable이 아니므로 ClassCastException이 발생함 if (TextUtils.isEmpty(seq) || !(seq instanceof Spannable)) { return ; } Spannable s = (Spannable)seq; URLSpan[] spans = s.getSpans(0, s.length(), URLSpan.class); for (URLSpan span: spans) { int start = s.getSpanStart(span); int end = s.getSpanEnd(span); s.removeSpan(span); span = new URLSpanNoUnderline(span.getURL()); s.setSpan(span, start, end, 0); } } private class URLSpanNoUnderline extends URLSpan { public URLSpanNoUnderline(String url) { super(url); } @Override public void updateDrawState(TextPaint ds) { super.updateDrawState(ds); ds.setUnderlineText(false); } } }
ex>
<dev.dnights.NoUnderlineTextView android:id="@+id/tvExample" android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/UrlLinkAccent" android:linksClickable="true" android:autoLink="web" tools:text="https://dnight.tistory.com/" />
[참고링크]
stackoverflow.com/questions/35962333/changing-color-of-hyperlink-in-android/35962551#35962551
m.blog.naver.com/myfuturepp/220324421632
반응형'Android' 카테고리의 다른 글
Android Sticky Header RecyclerView (0) 2021.06.17 Android Studio 자동완성 기능 안될경우 (with. MAC) (3) 2021.04.29 Android Notifications(알림) 표시 (0) 2021.03.14 [안드로이드] Intent로 이미지 가져오기 (0) 2021.03.06 Gson v 2.8.6 공식 번역본 (0) 2020.10.14 ConstraintLayout에서 match_parent 가 작동 안될경우 (0) 2020.09.21 Hilt 공식 문서 번역본 (0) 2020.07.24 android Resources.getSystem() mocking 처리 (0) 2020.07.15