Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

애증의 개발일지

[Android] TextView 속성 autoLink, linksClickable, textColorLink에 대해 알아보자!(하이퍼 링크를 쉽게 구현하자) 본문

Android

[Android] TextView 속성 autoLink, linksClickable, textColorLink에 대해 알아보자!(하이퍼 링크를 쉽게 구현하자)

Dabing 2022. 12. 8. 17:21

하이퍼 링크를 구현해보자

앱을 사용하다보면 이런식으로 텍스트 사이에 있는 url에 자동으로 하이퍼 링크가 설정되는 모습을 많이 볼 수 있습니다. 이러한 url(링크) 감지 및 하이퍼 링크 설정은 어떻게 하는 것일까요? 의외로 해당 기능의 경우 TextView의 XML AttributesautoLink, linksClickable, textColorLink를 활용할 경우 쉽게 구현할 수 있습니다. 해당 내용에 대해서 바로 알아보도록 합시다!


 TextView의 속성인 autoLink, linksClickable, textColorLink

 

autoLink, linksClickable, textColorLink의 경우 모두 TextView의 속성입니다.

따라서 TextView를 부모 클래스로 가지는(즉 상속받는..) Button과 EditText의 경우 autoLink, linksClickable, textColorLink 속성을 사용할 수 있습니다. TextView를 상속받는 뷰 컴포넌트라면 모두 해당 속성을 사용할 수 있습니다. 3가지 속성은 대략적으로 다음과 같은 기능을합니다.

  • autoLink : url과 이메일 등을 자동으로 감지해서 클릭가능한 링크로 변환해주는 속성
Controls whether links such as urls and email addresses are automatically found and converted to clickable links. The default value is "none", disabling this feature.
Must be one or more (separated by '|') of the following constant values.
  • linksClickable : 링크의 클릭 가능 여부를 조절하는 옵션
If set to false, keeps the movement method from being set to the link movement method even if autoLink causes links to be found.May be a boolean value, such as "true" or "false".

 

  • textColorLink : 링크의 색상을 지정하는 속성
Text color for links.May be a reference to another resource, in the form "@[+][package:]type/name" or a theme attribute in the form "?[package:]type/name".May be a color value, in the form of "#rgb", "#argb", "#rrggbb", or "#aarrggbb"

아래에서 각각의 속성들을 다루면서 좀 더 자세히 알아봅시다!


autoLink

url과 이메일 등을 자동으로 감지해서 클릭가능한 링크로 변환해주는 속성

  • default value는 none이다
  • autoLink에 설정할 수 있는 속성으로는 none, web, email, phone, map(Deprecated), all(Deprecated)이 있다
  • 를 사용해서 여러가지 속성을 적용할 수 있다
  • 관련된 메소드 : setAutoLinkMask(int) (Kotlin에서는 프로퍼티를 활용해서autoLinkMask로 바로 get/set 가능)

지원되는 상수 값 종류(비트 마스크 기법으로 상태 값이 적용됨, 16진수)

  • android: autoLink="all" - 상수 값 : 0x0f(15) (Deprecated in API level 33)
    • 모든 패턴(email, map, none, phone, web)을 다 적용
    • 클릭 시 패턴에 일치하는 앱 실행
    • Deprecated된 이유 : 

  • android: autoLink="email" - 상수 값 : 0x02(2)
    • 이메일 주소로 패턴 적용
    • 클릭 시 메일 클라이언트 앱 실행
     

  • android: autoLink="map" - 상수 값 : 0x08(8) (Deprecated in API level 28)
    • 지도 주소로 패턴 적용
    • 클릭 시 지도 앱 실행
  • android: autoLink="none" - 상수 값 : 0x00(0) (default value)
    • 아무런 패턴도 적용하지않음
  • android: autoLink="phone" - 상수 값 : 0x04(4)
    • 전화 번호로 패턴 적용
    • 포맷만 맞으면 -(ex. 010-1111-1111) 를 쓰든 띄워쓰기(ex. 010 1111 1111)를 하든 상관 없음
    • 클릭 시 전화 앱 실행

  • android: autoLink="web" - 상수 값 : 0x01(1)
    • WEB URL로 패턴 적용
    • 클릭 시 웹 브라우저 앱 실행

 

작동 원리

  • 기본적으로 TextView 내부에 mAutoLinkMask 변수를 통해 관리된다

  • autoLink의 경우 email, map, none, phone, web, all의 attr value를 받아와 아래 코드와 같이 mAutoLinkMask에 적용시켜준다

  • setText가 호출될 때, mAutoLinkMask가 0이 아니면(즉, none이 아니면) Linkify.addLinks를 통해 해당되는 패턴을 적용 시켜준다


linksClickable

링크의 클릭 가능 여부를 조절하는 옵션
  • default value는 true
  • false로 설정 될 경우에도 android:autoLink가 none이 아닌 다른 상수로 지정되어 있을 경우 패턴에 맞는 텍스트 감지가 되나, 클릭 시 다른 앱으로 전환이 되지않음
  • 관련된 메소드 : setLinksClickable(boolean) (Kotlin에서는 프로퍼티를 활용해서 linksClickable로 바로 get/set 가능)

작동 원리

  • 기본적으로 TextView 내부에 mLinksClickable 변수를 통해 관리된다

  • 해당 변수를 활용해 setMovementMethod(LinkMovementMethod.getInstance()); 호출 여부 지정(setText나 append 메소드에서 해당 부분 정의되어 있음)

textColorLink

링크의 색상을 지정하는 속성
  • 일반 적인 컬러를 지정하는 속성들과 같이 리소스 컬러 값이나 컬러코드 값("#rgb", "#argb", "#rrggbb", "#aarrggbb")으로 색상을 바꾼다
  • 관련된 메소드 : setLinkTextColor(int) (Kotlin에서는 프로퍼티를 활용해서 linkTextColors로 바로 get/set 가능)

예시

텍스트 컬러 링크 검정(#000000)으로 지정

작동 원리

  • 기본적으로 TextView 내부에 mLinkTextColor 변수를 통해 관리된다

  • updateTextColors 메소드 내부에서 mTextPaint.linkColor = color를 통해 링크의 색상을 지정한다 


외부 URI로 이동하는 것은 암시적 인텐트 방식밖에 몰랐는데, autoLink라는 속성을 통해서도(심지어 API1부터 추가되어 있던 속성이더라...)외부 앱으로 연동을 쉽게 구현할 수 있다는 것을 최근 진행중이던 프로젝트를 통해 알게되었습니다. 해당 포스팅을 통해 많은 분들이 하이퍼 링크를 구현하는 데 어려움을 겪지 않으셨으면 좋겠습니다 :)

참고자료

 

TextView  |  Android Developers

 

developer.android.com

 

 

안드로이드 텍스트뷰 속성. (Android TextView Attributes)

1. TextView 속성 TextView가 화면에 출력될 때, 기본적으로 단순한 텍스트 형태로 표시되지만, 속성을 사용함으로써 훨씬 다양한 모양과 기능을 가지게 만들 수 있습니다. TextView의 속성은 다른 View

recipes4dev.tistory.com