안드로이드 텍스트뷰 속성 2. [autoLink, linksClickable, textColorLink, breakStrategy] (Android TextView Attribute 2)

2016. 8. 22. 19:59


1. TextView 속성 (2)

TextView 속성 리스트 및 요약 설명을 확인하시려면 [안드로이드 텍스트뷰 속성] 페이지를 참고하시기 바랍니다.


TextView 속성에 대한 자세한 설명 및 예제를 확인하시려면, 아래 표에서 속성 이름을 클릭하시기 바랍니다.


속성 속성 속성 속성 속성
autoLink autoText breakStrategy bufferType capitalize
cursorVisible digits drawableBottom drawableEnd drawableLeft
drawablePadding drawableRight drawableStart drawableTint drawableTintMode
drawableTop editable editorExtras elegantTextHeight ellipsize
ems fontFamily fontFeatureSettings freezesText gravity
height hint hyphenationFrequency imeActionId imeActionLabel
imeOptions includeFontPadding inputMethod inputType letterSpacing
lineSpacingExtra lineSpacingMultiplier lines linksClickable marqueeRepeatLimit
maxEms maxHeight maxLength maxLines maxWidth
minEms minHeight minLines minWidth numeric
password phoneNumber privateImeOptions scrollHorizontally selectAllOnFocus
shadowColor shadowDx shadowDy shadowRadius singleLine
text textAllCaps textAppearance textColor textColorHighlight
textColorHint textColorLink textIsSelectable textScaleX textSize
textStyle typeface width

2. TextView 속성 활용.

TextView의 텍스트에 url이나 email 주소 형식의 텍스트가 포함되어 있을 때, 해당 형식의 텍스트를 링크 형태로 표시되도록 만들 수 있습니다. 이 때 "autoLink" 속성을 사용할 수 있습니다. autoLink 속성이 적용된 텍스트를 클릭하면 autoLink 속성에 지정된 값에 따라 자동으로 프로그램이 실행되며, 링크 형태로 표시된 텍스트가 실행된 프로그램으로 전달됩니다.

  * android:autoLink - TextView를 주소 링크 형태로 사용.
        > none, web, email, phone, map, all 값이 사용 가능.
        > 기본 값은 none 이며, 속성 값을 "|"로 조합해서 사용 가능. (예. "web | email")
          -. none (0x00) : 링크 적용 안함. (기본 값)
          -. web (0x01) : Web URL로 사용. (클릭 시, 웹 브라우저 앱 실행)
          -. email (0x02) : email 주소로 사용. (클릭 시, 메일 클라이언트 앱 실행)
          -. phone (0x04) : 전화번호로 사용. (클릭 시, 전화걸기 앱 실행)
          -. map (0x08) : 지도 주소로 사용. (클릭 시, 지도 앱 실행)
          -. all (0x0f) : 모든 경우 사용. (= "web | email | phone | map")

다음은 TextView에 autoLink 속성을 적용한 예제 코드 및 결과입니다.

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="20sp"
        android:autoLink="web|email"
        android:linksClickable="true"
        android:text=" web : recipes4dev.tistory.com \n email : ppottasoft@gmail.com \n phone : 010-1234-9876 \n map : 620 Eighth Avenue New York, NY 10018" />

텍스트뷰 속성 autoLink


autoLink 속성에 적용되는 값의 조합에 따라 링크 표시가 적용되는 텍스트 형식을 변경할 수 있습니다.
아래 예제는 위의 소스에서 autoLink 속성 값을 변경 적용한 결과입니다. (지도(map) 주소는 현재 영어 주소만 정상적으로 링크 표시가 되고 있습니다. 한글 주소를 사용하면 링크 형식으로 표시되지 않음을 주의하세요.)

텍스트뷰 속성 autoLink


autoLink 속성의 사용으로 텍스트가 링크 형식으로 출력되면, 링크를 클릭하여 시스템에 설치된 특정 앱(링크 정보를 처리하도록 등록된)을 실행할 수 있습니다. 이 때, 링크로 출력된 텍스트가 실행된 앱에 바로 전달됩니다.

텍스트뷰 속성 linksClickable


그런데 어떤 상황에서는 링크를 클릭해도 다른 앱이 실행되지 않도록 만들고 싶을 때도 있을 것입니다. 링크 형식의 표시는 그대로 유지한 채로 말이죠. 이를 위해 "linksClickable" 속성을 사용합니다. 즉, 링크 클릭 시 다른 프로그램을 실행 가능하게 할지 여부를 설정할 수 있습니다.

  * android:linksClickable - 링크 형식의 텍스트 링크 클릭 가능 여부 설정.
        > true 또는 false 값 지정. (기본 값 true)
        > 링크 표시 형태는 그대로 유지.
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="20sp"
        android:autoLink="all"
        android:linksClickable="false"
        android:text=" web : recipes4dev.tistory.com \n email : ppottasoft@gmail.com \n phone : 010-1234-9876 \n map : 620 Eighth Avenue New York, NY 10018" />

텍스트뷰 속성 linkClickable


linksClickable 속성을 false로 설정하고 실행하면, 링크 형식은 정상적으로 출력되지만 링크를 클릭해도 연결된 앱이 실행되지 않음을 확인할 수 있습니다.


마지막으로 autoLink가 설정된 TextView의 링크 색상을 변경하려면 "textColorLink" 속성을 사용합니다.

  * android:textColorLink - 링크로 사용하는 TextView의 텍스트 색상 지정.
        > 컬러 값 지정. (#rgb, #argb, #rrggbb, #aarrggbb 등의 형식)

아래 예제는 링크 색상을 초록색(#00FF00)으로 변경한 예제 코드입니다.

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="20sp"
        android:autoLink="all"
        android:linksClickable="true"
        android:textColorLink="#00FF00"
        android:text=" web : recipes4dev.tistory.com \n email : ppottasoft@gmail.com \n phone : 010-1234-9876 \n map : 620 Eighth Avenue New York, NY 10018" />

텍스트뷰 속성 textColorLink


2.2 텍스트가 TextView 영역을 넘어설 때 줄 넘김 정책 설정하기. (breakStrategy)

TextView의 텍스트에 지정된 문장이 TextView의 영역을 넘어서면 남은 문장이 다음 줄로 넘어가서 표시되는데, 이 때 줄 넘김이 표시되는 정책(strategy)을 지정할 수 있습니다. "breakStrategy" 속성을 사용합니다.

  * android:breakStrategy - TextView의 텍스트 줄넘김 정책 지정.
        > simple, high_quality, balanced 값 사용 가능.
        > 세 가지 상수 중 하나 지정. (기본 값은 simple)
          -. simple (0) : 간단한 정책. 넘어서는 단어부터 다음 줄에 표시. '-' 출력 안함.
          -. high_quality (1) : 자동 "-" 추가 기능을 포함하는 정책. 전체 문단 최적화.
          -. balanced (2) : 전체 문단의 줄 길이의 평균을 적용.
        > Android 6.0(API Level 23) 부터 사용 가능.

아래 예제는 비교적 짧은 문장을 사용하여 속성의 세 가지 값에 대한 출력 결과를 나타낸 것입니다.

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/textView1"
        android:background="#BBDEFB"
        android:textSize="32sp"
        android:breakStrategy="simple"
        android:text="This is the example of textview's attr breakStrategy."/>

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/textView2"
        android:background="#D1C4E9"
        android:layout_below="@id/textView1"
        android:textSize="32sp"
        android:breakStrategy="high_quality"
        android:text="This is the example of textview's attr breakStrategy."/>

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/textView3"
        android:background="#B2EBF2"
        android:layout_below="@id/textView2"
        android:textSize="32sp"
        android:breakStrategy="balanced"
        android:text="This is the example of textview's attr breakStrategy."/>

텍스트뷰 속성 breakStrategy


위의 예제를 보면, "simple"과 "high_quality"의 경우 동일한 결과로 출력되고, "balanced" 값은 두 줄의 길이가 균형에 맞춰(전체 문자열 길이의 평균에 가깝게) 출력되는 것을 확인할 수 있습니다.

"simple"과 "high_quality"의 차이점은, 긴 문장을 사용하는 경우 좀 더 쉽게 구분할 수 있습니다. 또한 "high_quality"를 적용한 경우, "-"를 출력하는 빈도를 높이기 위해 "hyphenationFrequency" 속성 값을 "full"로 적용하였습니다.

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/textView2"
        android:textSize="32sp"
        android:breakStrategy="high_quality"
        android:hyphenationFrequency="full"
        android:text="If set, the text view will include its current complete text inside of its frozen icicle in addition to meta-data such as the current cursor position. By default this is disabled; it can be useful when the contents of a text view is not stored in a persistent place such as a content provider." />

텍스트뷰 속성 breakStrategy


3. 참고.


ANDROID 프로그래밍/TEXTVIEW